Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7780)

Unified Diff: chrome/renderer/extensions/chrome_v8_extension.cc

Issue 12313142: Revert 184837 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/extensions/chrome_v8_extension.h ('k') | chrome/renderer/extensions/dispatcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/extensions/chrome_v8_extension.cc
===================================================================
--- chrome/renderer/extensions/chrome_v8_extension.cc (revision 184858)
+++ chrome/renderer/extensions/chrome_v8_extension.cc (working copy)
@@ -25,33 +25,61 @@
namespace extensions {
-ChromeV8Extension::ChromeV8Extension(Dispatcher* dispatcher)
- : ObjectBackedNativeHandler(v8::Context::GetCurrent()),
- dispatcher_(dispatcher) {
+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,
- v8::Handle<v8::Context> context)
- : ObjectBackedNativeHandler(context),
+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()),
dispatcher_(dispatcher) {
+ g_instances.Get().insert(this);
}
ChromeV8Extension::~ChromeV8Extension() {
+ g_instances.Get().erase(this);
}
-ChromeV8Context* ChromeV8Extension::GetContext() {
- CHECK(dispatcher_);
- return dispatcher_->v8_context_set().GetByV8Context(v8_context());
+// static
+const ChromeV8Extension::InstanceSet& ChromeV8Extension::GetAll() {
+ return g_instances.Get();
}
-content::RenderView* ChromeV8Extension::GetRenderView() {
- ChromeV8Context* context = GetContext();
- return context ? context->GetRenderView() : NULL;
-}
+const Extension* ChromeV8Extension::GetExtensionForCurrentRenderView() const {
+ content::RenderView* renderview = GetCurrentRenderView();
+ if (!renderview)
+ return NULL; // this can happen as a tab is closing.
-const Extension* ChromeV8Extension::GetExtensionForRenderView() {
- ChromeV8Context* context = GetContext();
- return context ? context->extension() : NULL;
+ WebDocument document = renderview->GetWebView()->mainFrame()->document();
+ GURL url = document.url();
+ const ExtensionSet* extensions = dispatcher_->extensions();
+ if (!extensions->ExtensionBindingsAllowed(
+ ExtensionURLInfo(document.securityOrigin(), url)))
+ return NULL;
+
+ return extensions->GetExtensionOrAppByURL(
+ ExtensionURLInfo(document.securityOrigin(), url));
}
} // namespace extensions
« no previous file with comments | « chrome/renderer/extensions/chrome_v8_extension.h ('k') | chrome/renderer/extensions/dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698