diff options
Diffstat (limited to 'chrome/renderer/extensions/extension_process_bindings.cc')
-rw-r--r-- | chrome/renderer/extensions/extension_process_bindings.cc | 39 |
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); } |