OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/extensions/dispatcher.h" | 5 #include "chrome/renderer/extensions/dispatcher.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/debug/alias.h" | 9 #include "base/debug/alias.h" |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "base/metrics/user_metrics_action.h" | 12 #include "base/metrics/user_metrics_action.h" |
13 #include "base/sha1.h" | 13 #include "base/sha1.h" |
14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
15 #include "base/strings/string_piece.h" | 15 #include "base/strings/string_piece.h" |
16 #include "base/strings/string_split.h" | 16 #include "base/strings/string_split.h" |
17 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
18 #include "chrome/common/chrome_switches.h" | 18 #include "chrome/common/chrome_switches.h" |
19 #include "chrome/common/chrome_version_info.h" | 19 #include "chrome/common/chrome_version_info.h" |
20 #include "chrome/common/crash_keys.h" | 20 #include "chrome/common/crash_keys.h" |
21 #include "chrome/common/extensions/features/feature_channel.h" | 21 #include "chrome/common/extensions/features/feature_channel.h" |
22 #include "chrome/common/extensions/manifest_handlers/externally_connectable.h" | 22 #include "chrome/common/extensions/manifest_handlers/externally_connectable.h" |
23 #include "chrome/common/url_constants.h" | 23 #include "chrome/common/url_constants.h" |
24 #include "chrome/renderer/chrome_render_process_observer.h" | 24 #include "chrome/renderer/chrome_render_process_observer.h" |
25 #include "chrome/renderer/extensions/api_activity_logger.h" | 25 #include "chrome/renderer/extensions/api_activity_logger.h" |
26 #include "chrome/renderer/extensions/app_bindings.h" | 26 #include "chrome/renderer/extensions/app_bindings.h" |
27 #include "chrome/renderer/extensions/app_runtime_custom_bindings.h" | 27 #include "chrome/renderer/extensions/app_runtime_custom_bindings.h" |
28 #include "chrome/renderer/extensions/app_window_custom_bindings.h" | 28 #include "chrome/renderer/extensions/app_window_custom_bindings.h" |
29 #include "chrome/renderer/extensions/chrome_v8_context.h" | 29 #include "chrome/renderer/extensions/chrome_v8_context.h" |
30 #include "chrome/renderer/extensions/chrome_v8_extension.h" | |
31 #include "chrome/renderer/extensions/dom_activity_logger.h" | 30 #include "chrome/renderer/extensions/dom_activity_logger.h" |
32 #include "chrome/renderer/extensions/extension_helper.h" | 31 #include "chrome/renderer/extensions/extension_helper.h" |
33 #include "chrome/renderer/extensions/file_browser_handler_custom_bindings.h" | 32 #include "chrome/renderer/extensions/file_browser_handler_custom_bindings.h" |
34 #include "chrome/renderer/extensions/file_browser_private_custom_bindings.h" | 33 #include "chrome/renderer/extensions/file_browser_private_custom_bindings.h" |
35 #include "chrome/renderer/extensions/media_galleries_custom_bindings.h" | 34 #include "chrome/renderer/extensions/media_galleries_custom_bindings.h" |
36 #include "chrome/renderer/extensions/messaging_bindings.h" | 35 #include "chrome/renderer/extensions/messaging_bindings.h" |
37 #include "chrome/renderer/extensions/page_actions_custom_bindings.h" | 36 #include "chrome/renderer/extensions/page_actions_custom_bindings.h" |
38 #include "chrome/renderer/extensions/page_capture_custom_bindings.h" | 37 #include "chrome/renderer/extensions/page_capture_custom_bindings.h" |
39 #include "chrome/renderer/extensions/pepper_request_natives.h" | 38 #include "chrome/renderer/extensions/pepper_request_natives.h" |
40 #include "chrome/renderer/extensions/runtime_custom_bindings.h" | 39 #include "chrome/renderer/extensions/runtime_custom_bindings.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
75 #include "extensions/renderer/file_system_natives.h" | 74 #include "extensions/renderer/file_system_natives.h" |
76 #include "extensions/renderer/i18n_custom_bindings.h" | 75 #include "extensions/renderer/i18n_custom_bindings.h" |
77 #include "extensions/renderer/id_generator_custom_bindings.h" | 76 #include "extensions/renderer/id_generator_custom_bindings.h" |
78 #include "extensions/renderer/logging_native_handler.h" | 77 #include "extensions/renderer/logging_native_handler.h" |
79 #include "extensions/renderer/module_system.h" | 78 #include "extensions/renderer/module_system.h" |
80 #include "extensions/renderer/object_backed_native_handler.h" | 79 #include "extensions/renderer/object_backed_native_handler.h" |
81 #include "extensions/renderer/render_view_observer_natives.h" | 80 #include "extensions/renderer/render_view_observer_natives.h" |
82 #include "extensions/renderer/request_sender.h" | 81 #include "extensions/renderer/request_sender.h" |
83 #include "extensions/renderer/safe_builtins.h" | 82 #include "extensions/renderer/safe_builtins.h" |
84 #include "extensions/renderer/script_context.h" | 83 #include "extensions/renderer/script_context.h" |
84 #include "extensions/renderer/script_context_set.h" | |
85 #include "extensions/renderer/send_request_natives.h" | 85 #include "extensions/renderer/send_request_natives.h" |
86 #include "extensions/renderer/set_icon_natives.h" | 86 #include "extensions/renderer/set_icon_natives.h" |
87 #include "extensions/renderer/utils_native_handler.h" | 87 #include "extensions/renderer/utils_native_handler.h" |
88 #include "grit/common_resources.h" | 88 #include "grit/common_resources.h" |
89 #include "grit/renderer_resources.h" | 89 #include "grit/renderer_resources.h" |
90 #include "third_party/WebKit/public/platform/WebString.h" | 90 #include "third_party/WebKit/public/platform/WebString.h" |
91 #include "third_party/WebKit/public/platform/WebURLRequest.h" | 91 #include "third_party/WebKit/public/platform/WebURLRequest.h" |
92 #include "third_party/WebKit/public/web/WebCustomElement.h" | 92 #include "third_party/WebKit/public/web/WebCustomElement.h" |
93 #include "third_party/WebKit/public/web/WebDataSource.h" | 93 #include "third_party/WebKit/public/web/WebDataSource.h" |
94 #include "third_party/WebKit/public/web/WebDocument.h" | 94 #include "third_party/WebKit/public/web/WebDocument.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
145 return chrome; | 145 return chrome; |
146 } | 146 } |
147 | 147 |
148 // Returns |value| cast to an object if possible, else an empty handle. | 148 // Returns |value| cast to an object if possible, else an empty handle. |
149 v8::Handle<v8::Object> AsObjectOrEmpty(v8::Handle<v8::Value> value) { | 149 v8::Handle<v8::Object> AsObjectOrEmpty(v8::Handle<v8::Value> value) { |
150 return value->IsObject() ? value.As<v8::Object>() : v8::Handle<v8::Object>(); | 150 return value->IsObject() ? value.As<v8::Object>() : v8::Handle<v8::Object>(); |
151 } | 151 } |
152 | 152 |
153 class TestFeaturesNativeHandler : public ObjectBackedNativeHandler { | 153 class TestFeaturesNativeHandler : public ObjectBackedNativeHandler { |
154 public: | 154 public: |
155 explicit TestFeaturesNativeHandler(ChromeV8Context* context) | 155 explicit TestFeaturesNativeHandler(ScriptContext* context) |
156 : ObjectBackedNativeHandler(context) { | 156 : ObjectBackedNativeHandler(context) { |
157 RouteFunction("GetAPIFeatures", | 157 RouteFunction("GetAPIFeatures", |
158 base::Bind(&TestFeaturesNativeHandler::GetAPIFeatures, | 158 base::Bind(&TestFeaturesNativeHandler::GetAPIFeatures, |
159 base::Unretained(this))); | 159 base::Unretained(this))); |
160 } | 160 } |
161 | 161 |
162 private: | 162 private: |
163 void GetAPIFeatures(const v8::FunctionCallbackInfo<v8::Value>& args) { | 163 void GetAPIFeatures(const v8::FunctionCallbackInfo<v8::Value>& args) { |
164 base::Value* value = base::JSONReader::Read( | 164 base::Value* value = base::JSONReader::Read( |
165 ResourceBundle::GetSharedInstance().GetRawDataResource( | 165 ResourceBundle::GetSharedInstance().GetRawDataResource( |
166 IDR_EXTENSION_API_FEATURES).as_string()); | 166 IDR_EXTENSION_API_FEATURES).as_string()); |
167 scoped_ptr<content::V8ValueConverter> converter( | 167 scoped_ptr<content::V8ValueConverter> converter( |
168 content::V8ValueConverter::create()); | 168 content::V8ValueConverter::create()); |
169 args.GetReturnValue().Set( | 169 args.GetReturnValue().Set( |
170 converter->ToV8Value(value, context()->v8_context())); | 170 converter->ToV8Value(value, context()->v8_context())); |
171 } | 171 } |
172 }; | 172 }; |
173 | 173 |
174 class UserGesturesNativeHandler : public ObjectBackedNativeHandler { | 174 class UserGesturesNativeHandler : public ObjectBackedNativeHandler { |
175 public: | 175 public: |
176 explicit UserGesturesNativeHandler(ChromeV8Context* context) | 176 explicit UserGesturesNativeHandler(ScriptContext* context) |
177 : ObjectBackedNativeHandler(context) { | 177 : ObjectBackedNativeHandler(context) { |
178 RouteFunction("IsProcessingUserGesture", | 178 RouteFunction("IsProcessingUserGesture", |
179 base::Bind(&UserGesturesNativeHandler::IsProcessingUserGesture, | 179 base::Bind(&UserGesturesNativeHandler::IsProcessingUserGesture, |
180 base::Unretained(this))); | 180 base::Unretained(this))); |
181 RouteFunction("RunWithUserGesture", | 181 RouteFunction("RunWithUserGesture", |
182 base::Bind(&UserGesturesNativeHandler::RunWithUserGesture, | 182 base::Bind(&UserGesturesNativeHandler::RunWithUserGesture, |
183 base::Unretained(this))); | 183 base::Unretained(this))); |
184 RouteFunction("RunWithoutUserGesture", | 184 RouteFunction("RunWithoutUserGesture", |
185 base::Bind(&UserGesturesNativeHandler::RunWithoutUserGesture, | 185 base::Bind(&UserGesturesNativeHandler::RunWithoutUserGesture, |
186 base::Unretained(this))); | 186 base::Unretained(this))); |
(...skipping 23 matching lines...) Expand all Loading... | |
210 CHECK_EQ(args.Length(), 1); | 210 CHECK_EQ(args.Length(), 1); |
211 CHECK(args[0]->IsFunction()); | 211 CHECK(args[0]->IsFunction()); |
212 v8::Handle<v8::Value> no_args; | 212 v8::Handle<v8::Value> no_args; |
213 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[0]), | 213 context()->CallFunction(v8::Handle<v8::Function>::Cast(args[0]), |
214 0, &no_args); | 214 0, &no_args); |
215 } | 215 } |
216 }; | 216 }; |
217 | 217 |
218 class V8ContextNativeHandler : public ObjectBackedNativeHandler { | 218 class V8ContextNativeHandler : public ObjectBackedNativeHandler { |
219 public: | 219 public: |
220 V8ContextNativeHandler(ChromeV8Context* context, Dispatcher* dispatcher) | 220 V8ContextNativeHandler(ScriptContext* context, Dispatcher* dispatcher) |
221 : ObjectBackedNativeHandler(context), | 221 : ObjectBackedNativeHandler(context), |
222 context_(context), | 222 context_(context), |
223 dispatcher_(dispatcher) { | 223 dispatcher_(dispatcher) { |
224 RouteFunction("GetAvailability", | 224 RouteFunction("GetAvailability", |
225 base::Bind(&V8ContextNativeHandler::GetAvailability, | 225 base::Bind(&V8ContextNativeHandler::GetAvailability, |
226 base::Unretained(this))); | 226 base::Unretained(this))); |
227 RouteFunction("GetModuleSystem", | 227 RouteFunction("GetModuleSystem", |
228 base::Bind(&V8ContextNativeHandler::GetModuleSystem, | 228 base::Bind(&V8ContextNativeHandler::GetModuleSystem, |
229 base::Unretained(this))); | 229 base::Unretained(this))); |
230 } | 230 } |
(...skipping 13 matching lines...) Expand all Loading... | |
244 ret->Set(v8::String::NewFromUtf8(isolate, "result"), | 244 ret->Set(v8::String::NewFromUtf8(isolate, "result"), |
245 v8::Integer::New(isolate, availability.result())); | 245 v8::Integer::New(isolate, availability.result())); |
246 args.GetReturnValue().Set(ret); | 246 args.GetReturnValue().Set(ret); |
247 } | 247 } |
248 | 248 |
249 void GetModuleSystem(const v8::FunctionCallbackInfo<v8::Value>& args) { | 249 void GetModuleSystem(const v8::FunctionCallbackInfo<v8::Value>& args) { |
250 CHECK_EQ(args.Length(), 1); | 250 CHECK_EQ(args.Length(), 1); |
251 CHECK(args[0]->IsObject()); | 251 CHECK(args[0]->IsObject()); |
252 v8::Handle<v8::Context> v8_context = | 252 v8::Handle<v8::Context> v8_context = |
253 v8::Handle<v8::Object>::Cast(args[0])->CreationContext(); | 253 v8::Handle<v8::Object>::Cast(args[0])->CreationContext(); |
254 ChromeV8Context* context = dispatcher_->v8_context_set().GetByV8Context( | 254 ScriptContext* context = |
255 v8_context); | 255 dispatcher_->script_context_set().GetByV8Context(v8_context); |
256 args.GetReturnValue().Set(context->module_system()->NewInstance()); | 256 args.GetReturnValue().Set(context->module_system()->NewInstance()); |
257 } | 257 } |
258 | 258 |
259 ChromeV8Context* context_; | 259 ScriptContext* context_; |
260 Dispatcher* dispatcher_; | 260 Dispatcher* dispatcher_; |
261 }; | 261 }; |
262 | 262 |
263 class ChromeNativeHandler : public ObjectBackedNativeHandler { | 263 class ChromeNativeHandler : public ObjectBackedNativeHandler { |
264 public: | 264 public: |
265 explicit ChromeNativeHandler(ChromeV8Context* context) | 265 explicit ChromeNativeHandler(ScriptContext* context) |
266 : ObjectBackedNativeHandler(context) { | 266 : ObjectBackedNativeHandler(context) { |
267 RouteFunction("GetChrome", | 267 RouteFunction("GetChrome", |
268 base::Bind(&ChromeNativeHandler::GetChrome, base::Unretained(this))); | 268 base::Bind(&ChromeNativeHandler::GetChrome, base::Unretained(this))); |
269 } | 269 } |
270 | 270 |
271 void GetChrome(const v8::FunctionCallbackInfo<v8::Value>& args) { | 271 void GetChrome(const v8::FunctionCallbackInfo<v8::Value>& args) { |
272 args.GetReturnValue().Set(GetOrCreateChrome(context())); | 272 args.GetReturnValue().Set(GetOrCreateChrome(context())); |
273 } | 273 } |
274 }; | 274 }; |
275 | 275 |
276 class PrintNativeHandler : public ObjectBackedNativeHandler { | 276 class PrintNativeHandler : public ObjectBackedNativeHandler { |
277 public: | 277 public: |
278 explicit PrintNativeHandler(ChromeV8Context* context) | 278 explicit PrintNativeHandler(ScriptContext* context) |
279 : ObjectBackedNativeHandler(context) { | 279 : ObjectBackedNativeHandler(context) { |
280 RouteFunction("Print", | 280 RouteFunction("Print", |
281 base::Bind(&PrintNativeHandler::Print, | 281 base::Bind(&PrintNativeHandler::Print, |
282 base::Unretained(this))); | 282 base::Unretained(this))); |
283 } | 283 } |
284 | 284 |
285 void Print(const v8::FunctionCallbackInfo<v8::Value>& args) { | 285 void Print(const v8::FunctionCallbackInfo<v8::Value>& args) { |
286 if (args.Length() < 1) | 286 if (args.Length() < 1) |
287 return; | 287 return; |
288 | 288 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
420 module_system->SetLazyField(chrome, "app", "app", "chromeApp"); | 420 module_system->SetLazyField(chrome, "app", "app", "chromeApp"); |
421 } | 421 } |
422 | 422 |
423 void InstallWebstoreBindings(ModuleSystem* module_system, | 423 void InstallWebstoreBindings(ModuleSystem* module_system, |
424 v8::Handle<v8::Object> chrome) { | 424 v8::Handle<v8::Object> chrome) { |
425 module_system->SetLazyField(chrome, "webstore", "webstore", "chromeWebstore"); | 425 module_system->SetLazyField(chrome, "webstore", "webstore", "chromeWebstore"); |
426 } | 426 } |
427 | 427 |
428 // Calls a method |method_name| in a module |module_name| belonging to the | 428 // Calls a method |method_name| in a module |module_name| belonging to the |
429 // module system from |context|. Intended as a callback target from | 429 // module system from |context|. Intended as a callback target from |
430 // ChromeV8ContextSet::ForEach. | 430 // ScriptContextSet::ForEach. |
431 void CallModuleMethod(const std::string& module_name, | 431 void CallModuleMethod(const std::string& module_name, |
432 const std::string& method_name, | 432 const std::string& method_name, |
433 const base::ListValue* args, | 433 const base::ListValue* args, |
434 ChromeV8Context* context) { | 434 ScriptContext* context) { |
435 v8::HandleScope handle_scope(context->isolate()); | 435 v8::HandleScope handle_scope(context->isolate()); |
436 v8::Context::Scope context_scope(context->v8_context()); | 436 v8::Context::Scope context_scope(context->v8_context()); |
437 | 437 |
438 scoped_ptr<content::V8ValueConverter> converter( | 438 scoped_ptr<content::V8ValueConverter> converter( |
439 content::V8ValueConverter::create()); | 439 content::V8ValueConverter::create()); |
440 | 440 |
441 std::vector<v8::Handle<v8::Value> > arguments; | 441 std::vector<v8::Handle<v8::Value> > arguments; |
442 for (base::ListValue::const_iterator it = args->begin(); it != args->end(); | 442 for (base::ListValue::const_iterator it = args->begin(); it != args->end(); |
443 ++it) { | 443 ++it) { |
444 arguments.push_back(converter->ToV8Value(*it, context->v8_context())); | 444 arguments.push_back(converter->ToV8Value(*it, context->v8_context())); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
586 const std::string& channel_name, | 586 const std::string& channel_name, |
587 const base::DictionaryValue& source_tab, | 587 const base::DictionaryValue& source_tab, |
588 const ExtensionMsg_ExternalConnectionInfo& info, | 588 const ExtensionMsg_ExternalConnectionInfo& info, |
589 const std::string& tls_channel_id) { | 589 const std::string& tls_channel_id) { |
590 DCHECK(!ContainsKey(port_to_tab_id_map_, target_port_id)); | 590 DCHECK(!ContainsKey(port_to_tab_id_map_, target_port_id)); |
591 DCHECK_EQ(1, target_port_id % 2); // target renderer ports have odd IDs. | 591 DCHECK_EQ(1, target_port_id % 2); // target renderer ports have odd IDs. |
592 int sender_tab_id = -1; | 592 int sender_tab_id = -1; |
593 source_tab.GetInteger("id", &sender_tab_id); | 593 source_tab.GetInteger("id", &sender_tab_id); |
594 port_to_tab_id_map_[target_port_id] = sender_tab_id; | 594 port_to_tab_id_map_[target_port_id] = sender_tab_id; |
595 | 595 |
596 MessagingBindings::DispatchOnConnect( | 596 MessagingBindings::DispatchOnConnect(script_context_set_.GetAll(), |
not at google - send to devlin
2014/04/17 15:11:10
MessagingBindings is another class that should be
| |
597 v8_context_set_.GetAll(), | 597 target_port_id, |
598 target_port_id, channel_name, source_tab, | 598 channel_name, |
599 info.source_id, info.target_id, info.source_url, | 599 source_tab, |
600 tls_channel_id, | 600 info.source_id, |
601 NULL); // All render views. | 601 info.target_id, |
602 info.source_url, | |
603 tls_channel_id, | |
604 NULL); // All render views. | |
602 } | 605 } |
603 | 606 |
604 void Dispatcher::OnDeliverMessage(int target_port_id, | 607 void Dispatcher::OnDeliverMessage(int target_port_id, |
605 const Message& message) { | 608 const Message& message) { |
606 scoped_ptr<RequestSender::ScopedTabID> scoped_tab_id; | 609 scoped_ptr<RequestSender::ScopedTabID> scoped_tab_id; |
607 std::map<int, int>::const_iterator it = | 610 std::map<int, int>::const_iterator it = |
608 port_to_tab_id_map_.find(target_port_id); | 611 port_to_tab_id_map_.find(target_port_id); |
609 if (it != port_to_tab_id_map_.end()) { | 612 if (it != port_to_tab_id_map_.end()) { |
610 scoped_tab_id.reset(new RequestSender::ScopedTabID(request_sender(), | 613 scoped_tab_id.reset(new RequestSender::ScopedTabID(request_sender(), |
611 it->second)); | 614 it->second)); |
612 } | 615 } |
613 | 616 |
614 MessagingBindings::DeliverMessage( | 617 MessagingBindings::DeliverMessage(script_context_set_.GetAll(), |
615 v8_context_set_.GetAll(), | 618 target_port_id, |
616 target_port_id, | 619 message, |
617 message, | 620 NULL); // All render views. |
618 NULL); // All render views. | |
619 } | 621 } |
620 | 622 |
621 void Dispatcher::OnDispatchOnDisconnect(int port_id, | 623 void Dispatcher::OnDispatchOnDisconnect(int port_id, |
622 const std::string& error_message) { | 624 const std::string& error_message) { |
623 MessagingBindings::DispatchOnDisconnect( | 625 MessagingBindings::DispatchOnDisconnect(script_context_set_.GetAll(), |
624 v8_context_set_.GetAll(), | 626 port_id, |
625 port_id, error_message, | 627 error_message, |
626 NULL); // All render views. | 628 NULL); // All render views. |
627 } | 629 } |
628 | 630 |
629 void Dispatcher::OnLoaded( | 631 void Dispatcher::OnLoaded( |
630 const std::vector<ExtensionMsg_Loaded_Params>& loaded_extensions) { | 632 const std::vector<ExtensionMsg_Loaded_Params>& loaded_extensions) { |
631 std::vector<ExtensionMsg_Loaded_Params>::const_iterator i; | 633 std::vector<ExtensionMsg_Loaded_Params>::const_iterator i; |
632 for (i = loaded_extensions.begin(); i != loaded_extensions.end(); ++i) { | 634 for (i = loaded_extensions.begin(); i != loaded_extensions.end(); ++i) { |
633 std::string error; | 635 std::string error; |
634 scoped_refptr<const Extension> extension = i->ConvertToExtension(&error); | 636 scoped_refptr<const Extension> extension = i->ConvertToExtension(&error); |
635 if (!extension.get()) { | 637 if (!extension.get()) { |
636 extension_load_errors_[i->id] = error; | 638 extension_load_errors_[i->id] = error; |
(...skipping 14 matching lines...) Expand all Loading... | |
651 void Dispatcher::OnUnloaded(const std::string& id) { | 653 void Dispatcher::OnUnloaded(const std::string& id) { |
652 extensions_.Remove(id); | 654 extensions_.Remove(id); |
653 active_extension_ids_.erase(id); | 655 active_extension_ids_.erase(id); |
654 | 656 |
655 // If the extension is later reloaded with a different set of permissions, | 657 // If the extension is later reloaded with a different set of permissions, |
656 // we'd like it to get a new isolated world ID, so that it can pick up the | 658 // we'd like it to get a new isolated world ID, so that it can pick up the |
657 // changed origin whitelist. | 659 // changed origin whitelist. |
658 user_script_slave_->RemoveIsolatedWorld(id); | 660 user_script_slave_->RemoveIsolatedWorld(id); |
659 | 661 |
660 // Invalidate all of the contexts that were removed. | 662 // Invalidate all of the contexts that were removed. |
661 // TODO(kalman): add an invalidation observer interface to ChromeV8Context. | 663 // TODO(kalman): add an invalidation observer interface to ScriptContext. |
662 ChromeV8ContextSet::ContextSet removed_contexts = | 664 ScriptContextSet::ContextSet removed_contexts = |
663 v8_context_set_.OnExtensionUnloaded(id); | 665 script_context_set_.OnExtensionUnloaded(id); |
664 for (ChromeV8ContextSet::ContextSet::iterator it = removed_contexts.begin(); | 666 for (ScriptContextSet::ContextSet::iterator it = removed_contexts.begin(); |
665 it != removed_contexts.end(); ++it) { | 667 it != removed_contexts.end(); |
668 ++it) { | |
666 request_sender_->InvalidateSource(*it); | 669 request_sender_->InvalidateSource(*it); |
667 } | 670 } |
668 | 671 |
669 // Update the available bindings for the remaining contexts. These may have | 672 // Update the available bindings for the remaining contexts. These may have |
670 // changed if an externally_connectable extension is unloaded and a webpage | 673 // changed if an externally_connectable extension is unloaded and a webpage |
671 // is no longer accessible. | 674 // is no longer accessible. |
672 AddOrRemoveBindings(""); | 675 AddOrRemoveBindings(""); |
673 | 676 |
674 // Invalidates the messages map for the extension in case the extension is | 677 // Invalidates the messages map for the extension in case the extension is |
675 // reloaded with a new messages map. | 678 // reloaded with a new messages map. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
708 v8::Handle<v8::Value> value = object->Get(key); | 711 v8::Handle<v8::Value> value = object->Get(key); |
709 CHECK(value->IsObject()); | 712 CHECK(value->IsObject()); |
710 return v8::Handle<v8::Object>::Cast(value); | 713 return v8::Handle<v8::Object>::Cast(value); |
711 } | 714 } |
712 | 715 |
713 v8::Handle<v8::Object> new_object = v8::Object::New(isolate); | 716 v8::Handle<v8::Object> new_object = v8::Object::New(isolate); |
714 object->Set(key, new_object); | 717 object->Set(key, new_object); |
715 return new_object; | 718 return new_object; |
716 } | 719 } |
717 | 720 |
718 void Dispatcher::AddOrRemoveBindingsForContext(ChromeV8Context* context) { | 721 void Dispatcher::AddOrRemoveBindingsForContext(ScriptContext* context) { |
719 v8::HandleScope handle_scope(context->isolate()); | 722 v8::HandleScope handle_scope(context->isolate()); |
720 v8::Context::Scope context_scope(context->v8_context()); | 723 v8::Context::Scope context_scope(context->v8_context()); |
721 | 724 |
722 // TODO(kalman): Make the bindings registration have zero overhead then run | 725 // TODO(kalman): Make the bindings registration have zero overhead then run |
723 // the same code regardless of context type. | 726 // the same code regardless of context type. |
724 switch (context->context_type()) { | 727 switch (context->context_type()) { |
725 case Feature::UNSPECIFIED_CONTEXT: | 728 case Feature::UNSPECIFIED_CONTEXT: |
726 case Feature::WEB_PAGE_CONTEXT: | 729 case Feature::WEB_PAGE_CONTEXT: |
727 case Feature::BLESSED_WEB_PAGE_CONTEXT: { | 730 case Feature::BLESSED_WEB_PAGE_CONTEXT: { |
728 // Web page context; it's too expensive to run the full bindings code. | 731 // Web page context; it's too expensive to run the full bindings code. |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
779 RegisterBinding("test", context); | 782 RegisterBinding("test", context); |
780 } | 783 } |
781 break; | 784 break; |
782 } | 785 } |
783 } | 786 } |
784 } | 787 } |
785 | 788 |
786 v8::Handle<v8::Object> Dispatcher::GetOrCreateBindObjectIfAvailable( | 789 v8::Handle<v8::Object> Dispatcher::GetOrCreateBindObjectIfAvailable( |
787 const std::string& api_name, | 790 const std::string& api_name, |
788 std::string* bind_name, | 791 std::string* bind_name, |
789 ChromeV8Context* context) { | 792 ScriptContext* context) { |
790 std::vector<std::string> split; | 793 std::vector<std::string> split; |
791 base::SplitString(api_name, '.', &split); | 794 base::SplitString(api_name, '.', &split); |
792 | 795 |
793 v8::Handle<v8::Object> bind_object; | 796 v8::Handle<v8::Object> bind_object; |
794 | 797 |
795 // Check if this API has an ancestor. If the API's ancestor is available and | 798 // Check if this API has an ancestor. If the API's ancestor is available and |
796 // the API is not available, don't install the bindings for this API. If | 799 // the API is not available, don't install the bindings for this API. If |
797 // the API is available and its ancestor is not, delete the ancestor and | 800 // the API is available and its ancestor is not, delete the ancestor and |
798 // install the bindings for the API. This is to prevent loading the ancestor | 801 // install the bindings for the API. This is to prevent loading the ancestor |
799 // API schema if it will not be needed. | 802 // API schema if it will not be needed. |
(...skipping 27 matching lines...) Expand all Loading... | |
827 return v8::Handle<v8::Object>(); | 830 return v8::Handle<v8::Object>(); |
828 | 831 |
829 if (bind_name) | 832 if (bind_name) |
830 *bind_name = split.back(); | 833 *bind_name = split.back(); |
831 | 834 |
832 return bind_object.IsEmpty() ? | 835 return bind_object.IsEmpty() ? |
833 AsObjectOrEmpty(GetOrCreateChrome(context)) : bind_object; | 836 AsObjectOrEmpty(GetOrCreateChrome(context)) : bind_object; |
834 } | 837 } |
835 | 838 |
836 void Dispatcher::RegisterBinding(const std::string& api_name, | 839 void Dispatcher::RegisterBinding(const std::string& api_name, |
837 ChromeV8Context* context) { | 840 ScriptContext* context) { |
838 std::string bind_name; | 841 std::string bind_name; |
839 v8::Handle<v8::Object> bind_object = | 842 v8::Handle<v8::Object> bind_object = |
840 GetOrCreateBindObjectIfAvailable(api_name, &bind_name, context); | 843 GetOrCreateBindObjectIfAvailable(api_name, &bind_name, context); |
841 | 844 |
842 // Empty if the bind object failed to be created, probably because the | 845 // Empty if the bind object failed to be created, probably because the |
843 // extension overrode chrome with a non-object, e.g. window.chrome = true. | 846 // extension overrode chrome with a non-object, e.g. window.chrome = true. |
844 if (bind_object.IsEmpty()) | 847 if (bind_object.IsEmpty()) |
845 return; | 848 return; |
846 | 849 |
847 v8::Local<v8::String> v8_api_name = | 850 v8::Local<v8::String> v8_api_name = |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
879 } else { | 882 } else { |
880 module_system->SetLazyField(bind_object, | 883 module_system->SetLazyField(bind_object, |
881 bind_name, | 884 bind_name, |
882 api_name, | 885 api_name, |
883 "binding"); | 886 "binding"); |
884 } | 887 } |
885 } | 888 } |
886 | 889 |
887 // NOTE: please use the naming convention "foo_natives" for these. | 890 // NOTE: please use the naming convention "foo_natives" for these. |
888 void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system, | 891 void Dispatcher::RegisterNativeHandlers(ModuleSystem* module_system, |
889 ChromeV8Context* context) { | 892 ScriptContext* context) { |
890 module_system->RegisterNativeHandler( | 893 module_system->RegisterNativeHandler( |
891 "event_natives", | 894 "event_natives", |
892 scoped_ptr<NativeHandler>(new EventBindings(this, context))); | 895 scoped_ptr<NativeHandler>(new EventBindings(this, context))); |
893 module_system->RegisterNativeHandler("messaging_natives", | 896 module_system->RegisterNativeHandler("messaging_natives", |
894 scoped_ptr<NativeHandler>(MessagingBindings::Get(this, context))); | 897 scoped_ptr<NativeHandler>(MessagingBindings::Get(this, context))); |
895 module_system->RegisterNativeHandler("apiDefinitions", | 898 module_system->RegisterNativeHandler("apiDefinitions", |
896 scoped_ptr<NativeHandler>(new ApiDefinitionsNatives(this, context))); | 899 scoped_ptr<NativeHandler>(new ApiDefinitionsNatives(this, context))); |
897 module_system->RegisterNativeHandler( | 900 module_system->RegisterNativeHandler( |
898 "sendRequest", | 901 "sendRequest", |
899 scoped_ptr<NativeHandler>( | 902 scoped_ptr<NativeHandler>( |
900 new SendRequestNatives(request_sender_.get(), context))); | 903 new SendRequestNatives(request_sender_.get(), context))); |
901 module_system->RegisterNativeHandler( | 904 module_system->RegisterNativeHandler( |
902 "setIcon", | 905 "setIcon", |
903 scoped_ptr<NativeHandler>( | 906 scoped_ptr<NativeHandler>( |
904 new SetIconNatives(request_sender_.get(), context))); | 907 new SetIconNatives(request_sender_.get(), context))); |
905 module_system->RegisterNativeHandler("activityLogger", | 908 module_system->RegisterNativeHandler( |
906 scoped_ptr<NativeHandler>(new APIActivityLogger(this, context))); | 909 "activityLogger", |
910 scoped_ptr<NativeHandler>(new APIActivityLogger(context))); | |
907 module_system->RegisterNativeHandler( | 911 module_system->RegisterNativeHandler( |
908 "renderViewObserverNatives", | 912 "renderViewObserverNatives", |
909 scoped_ptr<NativeHandler>(new RenderViewObserverNatives(context))); | 913 scoped_ptr<NativeHandler>(new RenderViewObserverNatives(context))); |
910 | 914 |
911 // Natives used by multiple APIs. | 915 // Natives used by multiple APIs. |
912 module_system->RegisterNativeHandler("file_system_natives", | 916 module_system->RegisterNativeHandler("file_system_natives", |
913 scoped_ptr<NativeHandler>(new FileSystemNatives(context))); | 917 scoped_ptr<NativeHandler>(new FileSystemNatives(context))); |
914 | 918 |
915 // Custom bindings. | 919 // Custom bindings. |
916 module_system->RegisterNativeHandler("app", | 920 module_system->RegisterNativeHandler("app", |
917 scoped_ptr<NativeHandler>(new AppBindings(this, context))); | 921 scoped_ptr<NativeHandler>(new AppBindings(this, context))); |
918 module_system->RegisterNativeHandler("app_runtime", | 922 module_system->RegisterNativeHandler( |
919 scoped_ptr<NativeHandler>( | 923 "app_runtime", |
920 new AppRuntimeCustomBindings(this, context))); | 924 scoped_ptr<NativeHandler>(new AppRuntimeCustomBindings(context))); |
921 module_system->RegisterNativeHandler("app_window_natives", | 925 module_system->RegisterNativeHandler("app_window_natives", |
922 scoped_ptr<NativeHandler>( | 926 scoped_ptr<NativeHandler>( |
923 new AppWindowCustomBindings(this, context))); | 927 new AppWindowCustomBindings(this, context))); |
924 module_system->RegisterNativeHandler("blob_natives", | 928 module_system->RegisterNativeHandler("blob_natives", |
925 scoped_ptr<NativeHandler>(new BlobNativeHandler(context))); | 929 scoped_ptr<NativeHandler>(new BlobNativeHandler(context))); |
926 module_system->RegisterNativeHandler( | 930 module_system->RegisterNativeHandler( |
927 "context_menus", | 931 "context_menus", |
928 scoped_ptr<NativeHandler>(new ContextMenusCustomBindings(context))); | 932 scoped_ptr<NativeHandler>(new ContextMenusCustomBindings(context))); |
929 module_system->RegisterNativeHandler( | 933 module_system->RegisterNativeHandler( |
930 "css_natives", scoped_ptr<NativeHandler>(new CssNativeHandler(context))); | 934 "css_natives", scoped_ptr<NativeHandler>(new CssNativeHandler(context))); |
931 module_system->RegisterNativeHandler( | 935 module_system->RegisterNativeHandler( |
932 "document_natives", | 936 "document_natives", |
933 scoped_ptr<NativeHandler>(new DocumentCustomBindings(context))); | 937 scoped_ptr<NativeHandler>(new DocumentCustomBindings(context))); |
934 module_system->RegisterNativeHandler("sync_file_system", | 938 module_system->RegisterNativeHandler( |
935 scoped_ptr<NativeHandler>( | 939 "sync_file_system", |
936 new SyncFileSystemCustomBindings(this, context))); | 940 scoped_ptr<NativeHandler>(new SyncFileSystemCustomBindings(context))); |
937 module_system->RegisterNativeHandler("file_browser_handler", | 941 module_system->RegisterNativeHandler( |
938 scoped_ptr<NativeHandler>(new FileBrowserHandlerCustomBindings( | 942 "file_browser_handler", |
939 this, context))); | 943 scoped_ptr<NativeHandler>(new FileBrowserHandlerCustomBindings(context))); |
940 module_system->RegisterNativeHandler("file_browser_private", | 944 module_system->RegisterNativeHandler( |
941 scoped_ptr<NativeHandler>(new FileBrowserPrivateCustomBindings( | 945 "file_browser_private", |
942 this, context))); | 946 scoped_ptr<NativeHandler>(new FileBrowserPrivateCustomBindings(context))); |
943 module_system->RegisterNativeHandler( | 947 module_system->RegisterNativeHandler( |
944 "i18n", scoped_ptr<NativeHandler>(new I18NCustomBindings(context))); | 948 "i18n", scoped_ptr<NativeHandler>(new I18NCustomBindings(context))); |
945 module_system->RegisterNativeHandler( | 949 module_system->RegisterNativeHandler( |
946 "id_generator", | 950 "id_generator", |
947 scoped_ptr<NativeHandler>(new IdGeneratorCustomBindings(context))); | 951 scoped_ptr<NativeHandler>(new IdGeneratorCustomBindings(context))); |
948 module_system->RegisterNativeHandler("mediaGalleries", | 952 module_system->RegisterNativeHandler( |
949 scoped_ptr<NativeHandler>( | 953 "mediaGalleries", |
950 new MediaGalleriesCustomBindings(this, context))); | 954 scoped_ptr<NativeHandler>(new MediaGalleriesCustomBindings(context))); |
951 module_system->RegisterNativeHandler("page_actions", | 955 module_system->RegisterNativeHandler( |
952 scoped_ptr<NativeHandler>( | 956 "page_actions", |
953 new PageActionsCustomBindings(this, context))); | 957 scoped_ptr<NativeHandler>(new PageActionsCustomBindings(this, context))); |
954 module_system->RegisterNativeHandler("page_capture", | 958 module_system->RegisterNativeHandler( |
955 scoped_ptr<NativeHandler>( | 959 "page_capture", |
956 new PageCaptureCustomBindings(this, context))); | 960 scoped_ptr<NativeHandler>(new PageCaptureCustomBindings(context))); |
957 module_system->RegisterNativeHandler( | 961 module_system->RegisterNativeHandler( |
958 "pepper_request_natives", | 962 "pepper_request_natives", |
959 scoped_ptr<NativeHandler>(new PepperRequestNatives(context))); | 963 scoped_ptr<NativeHandler>(new PepperRequestNatives(context))); |
960 module_system->RegisterNativeHandler("runtime", | 964 module_system->RegisterNativeHandler( |
961 scoped_ptr<NativeHandler>(new RuntimeCustomBindings(this, context))); | 965 "runtime", scoped_ptr<NativeHandler>(new RuntimeCustomBindings(context))); |
962 module_system->RegisterNativeHandler("tabs", | 966 module_system->RegisterNativeHandler( |
963 scoped_ptr<NativeHandler>(new TabsCustomBindings(this, context))); | 967 "tabs", scoped_ptr<NativeHandler>(new TabsCustomBindings(context))); |
964 module_system->RegisterNativeHandler("webstore", | 968 module_system->RegisterNativeHandler( |
965 scoped_ptr<NativeHandler>(new WebstoreBindings(this, context))); | 969 "webstore", scoped_ptr<NativeHandler>(new WebstoreBindings(context))); |
966 #if defined(ENABLE_WEBRTC) | 970 #if defined(ENABLE_WEBRTC) |
967 module_system->RegisterNativeHandler("cast_streaming_natives", | 971 module_system->RegisterNativeHandler("cast_streaming_natives", |
968 scoped_ptr<NativeHandler>(new CastStreamingNativeHandler(context))); | 972 scoped_ptr<NativeHandler>(new CastStreamingNativeHandler(context))); |
969 #endif | 973 #endif |
970 } | 974 } |
971 | 975 |
972 void Dispatcher::PopulateSourceMap() { | 976 void Dispatcher::PopulateSourceMap() { |
973 // Libraries. | 977 // Libraries. |
974 source_map_.RegisterSource("entryIdManager", IDR_ENTRY_ID_MANAGER); | 978 source_map_.RegisterSource("entryIdManager", IDR_ENTRY_ID_MANAGER); |
975 source_map_.RegisterSource(kEventBindings, IDR_EVENT_BINDINGS_JS); | 979 source_map_.RegisterSource(kEventBindings, IDR_EVENT_BINDINGS_JS); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1130 | 1134 |
1131 extension_id = ""; | 1135 extension_id = ""; |
1132 } | 1136 } |
1133 | 1137 |
1134 Feature::Context context_type = | 1138 Feature::Context context_type = |
1135 ClassifyJavaScriptContext(extension, | 1139 ClassifyJavaScriptContext(extension, |
1136 extension_group, | 1140 extension_group, |
1137 ScriptContext::GetDataSourceURLForFrame(frame), | 1141 ScriptContext::GetDataSourceURLForFrame(frame), |
1138 frame->document().securityOrigin()); | 1142 frame->document().securityOrigin()); |
1139 | 1143 |
1140 ChromeV8Context* context = | 1144 ScriptContext* context = |
1141 new ChromeV8Context(v8_context, frame, extension, context_type); | 1145 new ChromeV8Context(v8_context, frame, extension, context_type); |
1142 v8_context_set_.Add(context); | 1146 script_context_set_.Add(context); |
1143 | 1147 |
1144 if (extension) | 1148 if (extension) |
1145 InitOriginPermissions(extension, context_type); | 1149 InitOriginPermissions(extension, context_type); |
1146 | 1150 |
1147 { | 1151 { |
1148 scoped_ptr<ModuleSystem> module_system(new ModuleSystem(context, | 1152 scoped_ptr<ModuleSystem> module_system(new ModuleSystem(context, |
1149 &source_map_)); | 1153 &source_map_)); |
1150 context->set_module_system(module_system.Pass()); | 1154 context->set_module_system(module_system.Pass()); |
1151 } | 1155 } |
1152 ModuleSystem* module_system = context->module_system(); | 1156 ModuleSystem* module_system = context->module_system(); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1253 if (CommandLine::ForCurrentProcess()->HasSwitch( | 1257 if (CommandLine::ForCurrentProcess()->HasSwitch( |
1254 ::switches::kEnableAdview)) { | 1258 ::switches::kEnableAdview)) { |
1255 if (extension->HasAPIPermission(APIPermission::kAdView)) { | 1259 if (extension->HasAPIPermission(APIPermission::kAdView)) { |
1256 module_system->Require("adView"); | 1260 module_system->Require("adView"); |
1257 } else { | 1261 } else { |
1258 module_system->Require("denyAdView"); | 1262 module_system->Require("denyAdView"); |
1259 } | 1263 } |
1260 } | 1264 } |
1261 } | 1265 } |
1262 | 1266 |
1263 VLOG(1) << "Num tracked contexts: " << v8_context_set_.size(); | 1267 VLOG(1) << "Num tracked contexts: " << script_context_set_.size(); |
1264 } | 1268 } |
1265 | 1269 |
1266 std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) { | 1270 std::string Dispatcher::GetExtensionID(const WebFrame* frame, int world_id) { |
1267 if (world_id != 0) { | 1271 if (world_id != 0) { |
1268 // Isolated worlds (content script). | 1272 // Isolated worlds (content script). |
1269 return user_script_slave_->GetExtensionIdForIsolatedWorld(world_id); | 1273 return user_script_slave_->GetExtensionIdForIsolatedWorld(world_id); |
1270 } | 1274 } |
1271 | 1275 |
1272 // TODO(kalman): Delete this check. | 1276 // TODO(kalman): Delete this check. |
1273 if (frame->document().securityOrigin().isUnique()) | 1277 if (frame->document().securityOrigin().isUnique()) |
1274 return std::string(); | 1278 return std::string(); |
1275 | 1279 |
1276 // Extension pages (chrome-extension:// URLs). | 1280 // Extension pages (chrome-extension:// URLs). |
1277 GURL frame_url = ScriptContext::GetDataSourceURLForFrame(frame); | 1281 GURL frame_url = ScriptContext::GetDataSourceURLForFrame(frame); |
1278 return extensions_.GetExtensionOrAppIDByURL(frame_url); | 1282 return extensions_.GetExtensionOrAppIDByURL(frame_url); |
1279 } | 1283 } |
1280 | 1284 |
1281 bool Dispatcher::IsWithinPlatformApp() { | 1285 bool Dispatcher::IsWithinPlatformApp() { |
1282 for (std::set<std::string>::iterator iter = active_extension_ids_.begin(); | 1286 for (std::set<std::string>::iterator iter = active_extension_ids_.begin(); |
1283 iter != active_extension_ids_.end(); ++iter) { | 1287 iter != active_extension_ids_.end(); ++iter) { |
1284 const Extension* extension = extensions_.GetByID(*iter); | 1288 const Extension* extension = extensions_.GetByID(*iter); |
1285 if (extension && extension->is_platform_app()) | 1289 if (extension && extension->is_platform_app()) |
1286 return true; | 1290 return true; |
1287 } | 1291 } |
1288 return false; | 1292 return false; |
1289 } | 1293 } |
1290 | 1294 |
1291 void Dispatcher::WillReleaseScriptContext( | 1295 void Dispatcher::WillReleaseScriptContext( |
1292 WebFrame* frame, v8::Handle<v8::Context> v8_context, int world_id) { | 1296 WebFrame* frame, v8::Handle<v8::Context> v8_context, int world_id) { |
1293 ChromeV8Context* context = v8_context_set_.GetByV8Context(v8_context); | 1297 ScriptContext* context = script_context_set_.GetByV8Context(v8_context); |
1294 if (!context) | 1298 if (!context) |
1295 return; | 1299 return; |
1296 | 1300 |
1297 context->DispatchOnUnloadEvent(); | 1301 context->DispatchOnUnloadEvent(); |
1298 // TODO(kalman): add an invalidation observer interface to ChromeV8Context. | 1302 // TODO(kalman): add an invalidation observer interface to ScriptContext. |
1299 request_sender_->InvalidateSource(context); | 1303 request_sender_->InvalidateSource(context); |
1300 | 1304 |
1301 v8_context_set_.Remove(context); | 1305 script_context_set_.Remove(context); |
1302 VLOG(1) << "Num tracked contexts: " << v8_context_set_.size(); | 1306 VLOG(1) << "Num tracked contexts: " << script_context_set_.size(); |
1303 } | 1307 } |
1304 | 1308 |
1305 void Dispatcher::DidCreateDocumentElement(blink::WebFrame* frame) { | 1309 void Dispatcher::DidCreateDocumentElement(blink::WebFrame* frame) { |
1306 if (IsWithinPlatformApp()) { | 1310 if (IsWithinPlatformApp()) { |
1307 // WebKit doesn't let us define an additional user agent stylesheet, so we | 1311 // WebKit doesn't let us define an additional user agent stylesheet, so we |
1308 // insert the default platform app stylesheet into all documents that are | 1312 // insert the default platform app stylesheet into all documents that are |
1309 // loaded in each app. | 1313 // loaded in each app. |
1310 std::string stylesheet = | 1314 std::string stylesheet = |
1311 ResourceBundle::GetSharedInstance(). | 1315 ResourceBundle::GetSharedInstance(). |
1312 GetRawDataResource(IDR_PLATFORM_APP_CSS).as_string(); | 1316 GetRawDataResource(IDR_PLATFORM_APP_CSS).as_string(); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1407 } | 1411 } |
1408 | 1412 |
1409 void Dispatcher::EnableCustomElementWhiteList() { | 1413 void Dispatcher::EnableCustomElementWhiteList() { |
1410 blink::WebCustomElement::addEmbedderCustomElementName("webview"); | 1414 blink::WebCustomElement::addEmbedderCustomElementName("webview"); |
1411 // TODO(fsamuel): Add <adview> to the whitelist once it has been converted | 1415 // TODO(fsamuel): Add <adview> to the whitelist once it has been converted |
1412 // into a custom element. | 1416 // into a custom element. |
1413 blink::WebCustomElement::addEmbedderCustomElementName("browser-plugin"); | 1417 blink::WebCustomElement::addEmbedderCustomElementName("browser-plugin"); |
1414 } | 1418 } |
1415 | 1419 |
1416 void Dispatcher::AddOrRemoveBindings(const std::string& extension_id) { | 1420 void Dispatcher::AddOrRemoveBindings(const std::string& extension_id) { |
1417 v8_context_set().ForEach( | 1421 script_context_set().ForEach( |
1418 extension_id, | 1422 extension_id, |
1419 NULL, // all render views | 1423 NULL, // all render views |
1420 base::Bind(&Dispatcher::AddOrRemoveBindingsForContext, | 1424 base::Bind(&Dispatcher::AddOrRemoveBindingsForContext, |
1421 base::Unretained(this))); | 1425 base::Unretained(this))); |
1422 } | 1426 } |
1423 | 1427 |
1424 void Dispatcher::OnUpdatePermissions( | 1428 void Dispatcher::OnUpdatePermissions( |
1425 const ExtensionMsg_UpdatePermissions_Params& params) { | 1429 const ExtensionMsg_UpdatePermissions_Params& params) { |
1426 int reason_id = params.reason_id; | 1430 int reason_id = params.reason_id; |
1427 const std::string& extension_id = params.extension_id; | 1431 const std::string& extension_id = params.extension_id; |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1645 } | 1649 } |
1646 | 1650 |
1647 void Dispatcher::DispatchEvent(const std::string& extension_id, | 1651 void Dispatcher::DispatchEvent(const std::string& extension_id, |
1648 const std::string& event_name) const { | 1652 const std::string& event_name) const { |
1649 base::ListValue args; | 1653 base::ListValue args; |
1650 args.Set(0, new base::StringValue(event_name)); | 1654 args.Set(0, new base::StringValue(event_name)); |
1651 args.Set(1, new base::ListValue()); | 1655 args.Set(1, new base::ListValue()); |
1652 | 1656 |
1653 // Needed for Windows compilation, since kEventBindings is declared extern. | 1657 // Needed for Windows compilation, since kEventBindings is declared extern. |
1654 const char* local_event_bindings = kEventBindings; | 1658 const char* local_event_bindings = kEventBindings; |
1655 v8_context_set_.ForEach( | 1659 script_context_set_.ForEach(extension_id, |
1656 extension_id, | 1660 NULL, // all render views |
1657 NULL, // all render views | 1661 base::Bind(&CallModuleMethod, |
1658 base::Bind(&CallModuleMethod, | 1662 local_event_bindings, |
1659 local_event_bindings, | 1663 kEventDispatchFunction, |
1660 kEventDispatchFunction, | 1664 &args)); |
1661 &args)); | |
1662 } | 1665 } |
1663 | 1666 |
1664 void Dispatcher::InvokeModuleSystemMethod( | 1667 void Dispatcher::InvokeModuleSystemMethod( |
1665 content::RenderView* render_view, | 1668 content::RenderView* render_view, |
1666 const std::string& extension_id, | 1669 const std::string& extension_id, |
1667 const std::string& module_name, | 1670 const std::string& module_name, |
1668 const std::string& function_name, | 1671 const std::string& function_name, |
1669 const base::ListValue& args, | 1672 const base::ListValue& args, |
1670 bool user_gesture) { | 1673 bool user_gesture) { |
1671 scoped_ptr<WebScopedUserGesture> web_user_gesture; | 1674 scoped_ptr<WebScopedUserGesture> web_user_gesture; |
1672 if (user_gesture) | 1675 if (user_gesture) |
1673 web_user_gesture.reset(new WebScopedUserGesture); | 1676 web_user_gesture.reset(new WebScopedUserGesture); |
1674 | 1677 |
1675 v8_context_set_.ForEach( | 1678 script_context_set_.ForEach( |
1676 extension_id, | 1679 extension_id, |
1677 render_view, | 1680 render_view, |
1678 base::Bind(&CallModuleMethod, module_name, function_name, &args)); | 1681 base::Bind(&CallModuleMethod, module_name, function_name, &args)); |
1679 | 1682 |
1680 // Reset the idle handler each time there's any activity like event or message | 1683 // Reset the idle handler each time there's any activity like event or message |
1681 // dispatch, for which Invoke is the chokepoint. | 1684 // dispatch, for which Invoke is the chokepoint. |
1682 if (is_extension_process_) { | 1685 if (is_extension_process_) { |
1683 RenderThread::Get()->ScheduleIdleHandler( | 1686 RenderThread::Get()->ScheduleIdleHandler( |
1684 kInitialExtensionIdleHandlerDelayMs); | 1687 kInitialExtensionIdleHandlerDelayMs); |
1685 } | 1688 } |
(...skipping 14 matching lines...) Expand all Loading... | |
1700 } | 1703 } |
1701 | 1704 |
1702 void Dispatcher::ClearPortData(int port_id) { | 1705 void Dispatcher::ClearPortData(int port_id) { |
1703 // Only the target port side has entries in |port_to_tab_id_map_|. If | 1706 // Only the target port side has entries in |port_to_tab_id_map_|. If |
1704 // |port_id| is a source port, std::map::erase() will just silently fail | 1707 // |port_id| is a source port, std::map::erase() will just silently fail |
1705 // here as a no-op. | 1708 // here as a no-op. |
1706 port_to_tab_id_map_.erase(port_id); | 1709 port_to_tab_id_map_.erase(port_id); |
1707 } | 1710 } |
1708 | 1711 |
1709 } // namespace extensions | 1712 } // namespace extensions |
OLD | NEW |