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

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

Issue 9657026: Revert 125801 - Implement a module system for the extension bindings JS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 9 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
Index: chrome/renderer/extensions/chrome_v8_extension.cc
===================================================================
--- chrome/renderer/extensions/chrome_v8_extension.cc (revision 125813)
+++ chrome/renderer/extensions/chrome_v8_extension.cc (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -33,6 +33,11 @@
// static
+base::StringPiece ChromeV8Extension::GetStringResource(int resource_id) {
+ return ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id);
+}
+
+// static
content::RenderView* ChromeV8Extension::GetCurrentRenderView() {
WebFrame* webframe = WebFrame::frameForCurrentContext();
DCHECK(webframe) << "RetrieveCurrentFrame called when not in a V8 context.";
@@ -48,11 +53,30 @@
return renderview;
}
-ChromeV8Extension::ChromeV8Extension(ExtensionDispatcher* extension_dispatcher)
- : extension_dispatcher_(extension_dispatcher) {
+ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id,
+ ExtensionDispatcher* extension_dispatcher)
+ : v8::Extension(name,
+ GetStringResource(resource_id).data(),
+ 0, // num dependencies
+ NULL, // dependencies array
+ GetStringResource(resource_id).size()), // source length
+ extension_dispatcher_(extension_dispatcher) {
g_instances.Get().insert(this);
}
+ChromeV8Extension::ChromeV8Extension(const char* name, int resource_id,
+ int dependency_count,
+ const char** dependencies,
+ ExtensionDispatcher* extension_dispatcher)
+ : v8::Extension(name,
+ GetStringResource(resource_id).data(),
+ dependency_count,
+ dependencies,
+ GetStringResource(resource_id).size()),
+ extension_dispatcher_(extension_dispatcher) {
+ g_instances.Get().insert(this);
+}
+
ChromeV8Extension::~ChromeV8Extension() {
g_instances.Get().erase(this);
}
@@ -62,6 +86,19 @@
return g_instances.Get();
}
+void ChromeV8Extension::ContextWillBeReleased(ChromeV8Context* context) {
+ handlers_.erase(context);
+}
+
+ChromeV8ExtensionHandler* ChromeV8Extension::GetHandler(
+ ChromeV8Context* context) const {
+ HandlerMap::const_iterator iter = handlers_.find(context);
+ if (iter == handlers_.end())
+ return NULL;
+ else
+ return iter->second.get();
+}
+
const Extension* ChromeV8Extension::GetExtensionForCurrentRenderView() const {
content::RenderView* renderview = GetCurrentRenderView();
if (!renderview)
@@ -115,3 +152,61 @@
return true;
}
+
+v8::Handle<v8::FunctionTemplate>
+ ChromeV8Extension::GetNativeFunction(v8::Handle<v8::String> name) {
+ if (name->Equals(v8::String::New("GetChromeHidden"))) {
+ return v8::FunctionTemplate::New(GetChromeHidden);
+ }
+
+ if (name->Equals(v8::String::New("Print"))) {
+ return v8::FunctionTemplate::New(Print);
+ }
+
+ return v8::FunctionTemplate::New(HandleNativeFunction,
+ v8::External::New(this));
+}
+
+// static
+v8::Handle<v8::Value> ChromeV8Extension::HandleNativeFunction(
+ const v8::Arguments& arguments) {
+ ChromeV8Extension* self = GetFromArguments<ChromeV8Extension>(arguments);
+ ChromeV8Context* context =
+ self->extension_dispatcher()->v8_context_set().GetCurrent();
+ CHECK(context) << "Unknown V8 context. Maybe a native function is getting "
+ << "called during parse of a v8 extension, before the context "
+ << "has been registered.";
+
+ ChromeV8ExtensionHandler* handler = self->GetHandler(context);
+ if (!handler) {
+ handler = self->CreateHandler(context);
+ if (handler)
+ self->handlers_[context] = linked_ptr<ChromeV8ExtensionHandler>(handler);
+ }
+ CHECK(handler) << "No handler for v8 extension: " << self->name();
+
+ std::string name = *v8::String::AsciiValue(arguments.Callee()->GetName());
+ return handler->HandleNativeFunction(name, arguments);
+}
+
+ChromeV8ExtensionHandler* ChromeV8Extension::CreateHandler(
+ ChromeV8Context* context) {
+ return NULL;
+}
+
+v8::Handle<v8::Value> ChromeV8Extension::GetChromeHidden(
+ const v8::Arguments& args) {
+ return ChromeV8Context::GetOrCreateChromeHidden(v8::Context::GetCurrent());
+}
+
+v8::Handle<v8::Value> ChromeV8Extension::Print(const v8::Arguments& args) {
+ if (args.Length() < 1)
+ return v8::Undefined();
+
+ std::vector<std::string> components;
+ for (int i = 0; i < args.Length(); ++i)
+ components.push_back(*v8::String::Utf8Value(args[i]->ToString()));
+
+ LOG(ERROR) << JoinString(components, ',');
+ return v8::Undefined();
+}
« no previous file with comments | « chrome/renderer/extensions/chrome_v8_extension.h ('k') | chrome/renderer/extensions/chrome_v8_extension_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698