| Index: chrome/renderer/extensions/extension_dispatcher.cc
|
| diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc
|
| index 1cdfb9ae84934fabe1a4efcec732cdca9527b4ae..84e41a0ca7d4d0342c9646021ee63dd7cde2f226 100644
|
| --- a/chrome/renderer/extensions/extension_dispatcher.cc
|
| +++ b/chrome/renderer/extensions/extension_dispatcher.cc
|
| @@ -118,6 +118,24 @@ class PrintNativeHandler : public NativeHandler {
|
| }
|
| };
|
|
|
| +void InstallAppBindings(ModuleSystem* module_system,
|
| + v8::Handle<v8::Object> chrome,
|
| + v8::Handle<v8::Object> chrome_hidden) {
|
| + module_system->SetLazyField(chrome, "app", "app", "chromeApp");
|
| + module_system->SetLazyField(chrome, "appNotifications", "app",
|
| + "chromeAppNotifications");
|
| + module_system->SetLazyField(chrome_hidden, "app", "app",
|
| + "chromeHiddenApp");
|
| +}
|
| +
|
| +void InstallWebstoreBindings(ModuleSystem* module_system,
|
| + v8::Handle<v8::Object> chrome,
|
| + v8::Handle<v8::Object> chrome_hidden) {
|
| + module_system->SetLazyField(chrome, "webstore", "webstore", "chromeWebstore");
|
| + module_system->SetLazyField(chrome_hidden, "webstore", "webstore",
|
| + "chromeHiddenWebstore");
|
| +}
|
| +
|
| }
|
|
|
| ExtensionDispatcher::ExtensionDispatcher()
|
| @@ -471,6 +489,10 @@ void ExtensionDispatcher::DidCreateScriptContext(
|
| if (extension)
|
| manifest_version = extension->manifest_version();
|
|
|
| + std::map<std::string, BindingInstaller> optimized_bindings;
|
| + optimized_bindings["app"] = InstallAppBindings;
|
| + optimized_bindings["webstore"] = InstallWebstoreBindings;
|
| +
|
| // Create the 'chrome' variable if it doesn't already exist.
|
| {
|
| v8::HandleScope handle_scope;
|
| @@ -513,20 +535,13 @@ void ExtensionDispatcher::DidCreateScriptContext(
|
|
|
| for (std::set<std::string>::iterator i = apis->begin(); i != apis->end();
|
| ++i) {
|
| - if (*i == "app") {
|
| - // As 'app' is loaded on every page we implement lazy bindings in C++
|
| - // here to improve performance (ie: don't load any JS).
|
| - v8::Handle<v8::Object> global = v8::Context::GetCurrent()->Global();
|
| + if (optimized_bindings.count(*i) > 0) {
|
| + v8::Handle<v8::Object> global(v8::Context::GetCurrent()->Global());
|
| v8::Handle<v8::Object> chrome =
|
| global->Get(v8::String::New("chrome"))->ToObject();
|
| -
|
| - module_system->SetLazyField(chrome, "app", "app", "chromeApp");
|
| - module_system->SetLazyField(chrome, "appNotifications", "app",
|
| - "chromeAppNotifications");
|
| v8::Handle<v8::Object> chrome_hidden =
|
| ChromeV8Context::GetOrCreateChromeHidden(v8_context)->ToObject();
|
| - module_system->SetLazyField(chrome_hidden, "app", "app",
|
| - "chromeHiddenApp");
|
| + optimized_bindings[*i](module_system.get(), chrome, chrome_hidden);
|
| continue;
|
| }
|
| module_system->Require(*i);
|
|
|