Index: chrome/renderer/extensions/chrome_v8_extension.cc |
diff --git a/chrome/renderer/extensions/chrome_v8_extension.cc b/chrome/renderer/extensions/chrome_v8_extension.cc |
index a5cbf03e98d2b8b3acb3215c397b20e8d76d97dd..2a3e7d6db138e85f81628674ef347bcb9f79911d 100644 |
--- a/chrome/renderer/extensions/chrome_v8_extension.cc |
+++ b/chrome/renderer/extensions/chrome_v8_extension.cc |
@@ -25,61 +25,28 @@ using WebKit::WebView; |
namespace extensions { |
-namespace { |
- |
-static base::LazyInstance<ChromeV8Extension::InstanceSet> g_instances = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-} // namespace |
- |
-// static |
-content::RenderView* ChromeV8Extension::GetCurrentRenderView() { |
- WebFrame* webframe = WebFrame::frameForCurrentContext(); |
- DCHECK(webframe) << "RetrieveCurrentFrame called when not in a V8 context."; |
- if (!webframe) |
- return NULL; |
- |
- WebView* webview = webframe->view(); |
- if (!webview) |
- return NULL; // can happen during closing |
- |
- content::RenderView* renderview = content::RenderView::FromWebView(webview); |
- DCHECK(renderview) << "Encountered a WebView without a WebViewDelegate"; |
- return renderview; |
-} |
- |
-ChromeV8Extension::ChromeV8Extension(Dispatcher* dispatcher) |
- // TODO(svenpanne) It would be nice to remove the GetCurrent() call and use |
- // an additional constructor parameter instead, but this would involve too |
- // many changes for now. |
- : NativeHandler(v8::Isolate::GetCurrent()), |
+ChromeV8Extension::ChromeV8Extension(Dispatcher* dispatcher, |
+ v8::Handle<v8::Context> context) |
+ : ObjectBackedNativeHandler(context), |
dispatcher_(dispatcher) { |
- g_instances.Get().insert(this); |
+ CHECK(dispatcher); |
} |
ChromeV8Extension::~ChromeV8Extension() { |
- g_instances.Get().erase(this); |
} |
-// static |
-const ChromeV8Extension::InstanceSet& ChromeV8Extension::GetAll() { |
- return g_instances.Get(); |
+ChromeV8Context* ChromeV8Extension::GetContext() { |
+ return dispatcher_->v8_context_set().GetByV8Context(v8_context()); |
} |
-const Extension* ChromeV8Extension::GetExtensionForCurrentRenderView() const { |
- content::RenderView* renderview = GetCurrentRenderView(); |
- if (!renderview) |
- return NULL; // this can happen as a tab is closing. |
- |
- WebDocument document = renderview->GetWebView()->mainFrame()->document(); |
- GURL url = document.url(); |
- const ExtensionSet* extensions = dispatcher_->extensions(); |
- if (!extensions->ExtensionBindingsAllowed( |
- ExtensionURLInfo(document.securityOrigin(), url))) |
- return NULL; |
+content::RenderView* ChromeV8Extension::GetRenderView() { |
+ ChromeV8Context* context = GetContext(); |
+ return context ? context->GetRenderView() : NULL; |
+} |
- return extensions->GetExtensionOrAppByURL( |
- ExtensionURLInfo(document.securityOrigin(), url)); |
+const Extension* ChromeV8Extension::GetExtensionForRenderView() { |
+ ChromeV8Context* context = GetContext(); |
+ return context ? context->extension() : NULL; |
} |
} // namespace extensions |