summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/extensions/extension_process_bindings.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/extensions/extension_process_bindings.cc')
-rw-r--r--chrome/renderer/extensions/extension_process_bindings.cc39
1 files changed, 11 insertions, 28 deletions
diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc
index 9cdc396..128375b 100644
--- a/chrome/renderer/extensions/extension_process_bindings.cc
+++ b/chrome/renderer/extensions/extension_process_bindings.cc
@@ -4,7 +4,6 @@
#include "chrome/renderer/extensions/extension_process_bindings.h"
-#include <map>
#include <set>
#include <string>
#include <vector>
@@ -12,7 +11,6 @@
#include "base/callback.h"
#include "base/command_line.h"
#include "base/json/json_reader.h"
-#include "base/lazy_instance.h"
#include "base/memory/scoped_ptr.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
@@ -25,8 +23,8 @@
#include "chrome/common/render_messages.h"
#include "chrome/common/url_constants.h"
#include "chrome/renderer/chrome_render_process_observer.h"
+#include "chrome/renderer/extensions/bindings_utils.h"
#include "chrome/renderer/extensions/event_bindings.h"
-#include "chrome/renderer/extensions/extension_bindings_context.h"
#include "chrome/renderer/extensions/extension_base.h"
#include "chrome/renderer/extensions/extension_dispatcher.h"
#include "chrome/renderer/extensions/extension_helper.h"
@@ -44,6 +42,9 @@
#include "third_party/skia/include/core/SkColor.h"
#include "webkit/glue/webkit_glue.h"
+using bindings_utils::GetPendingRequestMap;
+using bindings_utils::PendingRequest;
+using bindings_utils::PendingRequestMap;
using WebKit::WebFrame;
using WebKit::WebView;
@@ -57,20 +58,6 @@ const char* kExtensionDeps[] = {
ExtensionApiTestV8Extension::kName,
};
-// Contains info relevant to a pending API request.
-struct PendingRequest {
- public :
- PendingRequest(v8::Persistent<v8::Context> context, const std::string& name)
- : context(context), name(name) {
- }
- v8::Persistent<v8::Context> context;
- std::string name;
-};
-typedef std::map<int, linked_ptr<PendingRequest> > PendingRequestMap;
-
-base::LazyInstance<PendingRequestMap> g_pending_requests(
- base::LINKER_INITIALIZED);
-
// A RenderViewVisitor class that iterates through the set of available
// views, looking for a view of the given type, in the given browser window
// and within the given extension.
@@ -442,7 +429,7 @@ class ExtensionImpl : public ExtensionBase {
v8::Persistent<v8::Context> current_context =
v8::Persistent<v8::Context>::New(v8::Context::GetCurrent());
DCHECK(!current_context.IsEmpty());
- g_pending_requests.Get()[request_id].reset(new PendingRequest(
+ GetPendingRequestMap()[request_id].reset(new PendingRequest(
current_context, name));
ExtensionHostMsg_Request_Params params;
@@ -573,9 +560,9 @@ v8::Extension* ExtensionProcessBindings::Get(
void ExtensionProcessBindings::HandleResponse(int request_id, bool success,
const std::string& response,
const std::string& error) {
- PendingRequestMap::iterator request =
- g_pending_requests.Get().find(request_id);
- if (request == g_pending_requests.Get().end())
+ PendingRequestMap& pending_requests = GetPendingRequestMap();
+ PendingRequestMap::iterator request = pending_requests.find(request_id);
+ if (request == pending_requests.end())
return; // The frame went away.
v8::HandleScope handle_scope;
@@ -585,12 +572,8 @@ void ExtensionProcessBindings::HandleResponse(int request_id, bool success,
argv[2] = v8::Boolean::New(success);
argv[3] = v8::String::New(response.c_str());
argv[4] = v8::String::New(error.c_str());
- ExtensionBindingsContext* bindings_context =
- ExtensionBindingsContext::GetByV8Context(request->second->context);
- v8::Handle<v8::Value> retval =
- bindings_context->CallChromeHiddenMethod("handleResponse",
- arraysize(argv),
- argv);
+ v8::Handle<v8::Value> retval = bindings_utils::CallFunctionInContext(
+ request->second->context, "handleResponse", arraysize(argv), argv);
// In debug, the js will validate the callback parameters and return a
// string if a validation error has occured.
#ifndef NDEBUG
@@ -602,5 +585,5 @@ void ExtensionProcessBindings::HandleResponse(int request_id, bool success,
request->second->context.Dispose();
request->second->context.Clear();
- g_pending_requests.Get().erase(request);
+ pending_requests.erase(request);
}