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

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

Issue 9386001: Implement a module system for the extension bindings JS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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
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 35b5153c45d024bbbeac10fc3736dbb19901502e..3274dc62b41d4d2dfb0bbebeb0a145fac58c7280 100644
--- a/chrome/renderer/extensions/chrome_v8_extension.cc
+++ b/chrome/renderer/extensions/chrome_v8_extension.cc
@@ -18,6 +18,10 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
#include "ui/base/resource/resource_bundle.h"
+#include "grit/renderer_resources.h"
+
+#include <iostream>
Aaron Boodman 2012/02/16 01:54:42 These seem unneeded.
koz (OOO until 15th September) 2012/02/27 01:06:14 Done.
+using namespace std;
using extensions::ExtensionAPI;
using WebKit::WebDocument;
@@ -87,16 +91,6 @@ const ChromeV8Extension::InstanceSet& ChromeV8Extension::GetAll() {
}
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 {
@@ -153,60 +147,29 @@ bool ChromeV8Extension::CheckCurrentContextAccessToExtensionAPI(
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);
+ const std::string& function_name, const v8::Arguments& args) {
+ CHECK(false) << "Failed to handle native call to " << function_name;
+ return v8::Undefined();
}
-ChromeV8ExtensionHandler* ChromeV8Extension::CreateHandler(
- ChromeV8Context* context) {
- return NULL;
+// static
+v8::Handle<v8::Value> ChromeV8Extension::Router(const v8::Arguments& args) {
+ std::string callee_name = *v8::String::AsciiValue(args.Callee()->GetName());
+ ChromeV8Extension* extension = static_cast<ChromeV8Extension*>(
+ args.Data().As<v8::External>()->Value());
+ return extension->HandleNativeFunction(callee_name, args);
}
-v8::Handle<v8::Value> ChromeV8Extension::GetChromeHidden(
- const v8::Arguments& args) {
- return ChromeV8Context::GetOrCreateChromeHidden(v8::Context::GetCurrent());
+void ChromeV8Extension::RouteFunctionHere(const char* name,
+ v8::Handle<v8::Object> object) {
+ RouteFunctionToStatic(name, Router, object);
}
-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();
+void ChromeV8Extension::RouteFunctionToStatic(const char* name,
+ HandlerFunction function, v8::Handle<v8::Object> object) {
+ v8::Handle<v8::Function> v8_function = v8::FunctionTemplate::New(
+ function, v8::External::New(this))->GetFunction();
+ v8_function->SetName(v8::String::New(name));
+ object->Set(v8::String::NewSymbol(name), v8_function);
}

Powered by Google App Engine
This is Rietveld 408576698