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/extension_dispatcher.h" | 5 #include "chrome/renderer/extensions/extension_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/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/string_piece.h" | 10 #include "base/string_piece.h" |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
204 base::Unretained(this))); | 204 base::Unretained(this))); |
205 } | 205 } |
206 | 206 |
207 v8::Handle<v8::Value> IsDevChannel(const v8::Arguments& args) { | 207 v8::Handle<v8::Value> IsDevChannel(const v8::Arguments& args) { |
208 return v8::Boolean::New(channel_ <= chrome::VersionInfo::CHANNEL_DEV); | 208 return v8::Boolean::New(channel_ <= chrome::VersionInfo::CHANNEL_DEV); |
209 } | 209 } |
210 | 210 |
211 chrome::VersionInfo::Channel channel_; | 211 chrome::VersionInfo::Channel channel_; |
212 }; | 212 }; |
213 | 213 |
214 class LoggingNativeHandler : public NativeHandler { | |
215 public: | |
216 LoggingNativeHandler() { | |
217 RouteFunction("DCHECK", | |
218 base::Bind(&LoggingNativeHandler::Dcheck, | |
219 base::Unretained(this))); | |
220 } | |
221 | |
222 v8::Handle<v8::Value> Dcheck(const v8::Arguments& args) { | |
223 CHECK_LE(args.Length(), 2); | |
224 bool check_value = args[0]->BooleanValue(); | |
225 std::stringstream error_message; | |
Matt Perry
2012/07/09 20:36:47
Streams are forbidden by the style guide. Use Stri
koz (OOO until 15th September)
2012/07/11 00:00:38
Done.
| |
226 if (args.Length() == 2) | |
227 error_message << "Error: " << *v8::String::AsciiValue(args[1]) | |
228 << std::endl; | |
229 | |
230 v8::Handle<v8::Array> stack_trace( | |
231 v8::StackTrace::CurrentStackTrace(10)->AsArray()); | |
232 error_message << "Stack trace: {" << std::endl; | |
233 for (size_t i = 0; i < stack_trace->Length(); i++) { | |
234 error_message << " " << *v8::String::AsciiValue(stack_trace->Get(i)) | |
235 << std::endl; | |
236 } | |
237 error_message << "}"; | |
238 DCHECK(check_value) << error_message.str(); | |
239 return v8::Undefined(); | |
240 } | |
241 }; | |
242 | |
214 void InstallAppBindings(ModuleSystem* module_system, | 243 void InstallAppBindings(ModuleSystem* module_system, |
215 v8::Handle<v8::Object> chrome, | 244 v8::Handle<v8::Object> chrome, |
216 v8::Handle<v8::Object> chrome_hidden) { | 245 v8::Handle<v8::Object> chrome_hidden) { |
217 module_system->SetLazyField(chrome, "app", "app", "chromeApp"); | 246 module_system->SetLazyField(chrome, "app", "app", "chromeApp"); |
218 module_system->SetLazyField(chrome, "appNotifications", "app", | 247 module_system->SetLazyField(chrome, "appNotifications", "app", |
219 "chromeAppNotifications"); | 248 "chromeAppNotifications"); |
220 module_system->SetLazyField(chrome_hidden, "app", "app", | 249 module_system->SetLazyField(chrome_hidden, "app", "app", |
221 "chromeHiddenApp"); | 250 "chromeHiddenApp"); |
222 } | 251 } |
223 | 252 |
224 void InstallWebstoreBindings(ModuleSystem* module_system, | 253 void InstallWebstoreBindings(ModuleSystem* module_system, |
225 v8::Handle<v8::Object> chrome, | 254 v8::Handle<v8::Object> chrome, |
226 v8::Handle<v8::Object> chrome_hidden) { | 255 v8::Handle<v8::Object> chrome_hidden) { |
227 module_system->SetLazyField(chrome, "webstore", "webstore", "chromeWebstore"); | 256 module_system->SetLazyField(chrome, "webstore", "webstore", "chromeWebstore"); |
228 module_system->SetLazyField(chrome_hidden, "webstore", "webstore", | 257 module_system->SetLazyField(chrome_hidden, "webstore", "webstore", |
229 "chromeHiddenWebstore"); | 258 "chromeHiddenWebstore"); |
230 } | 259 } |
231 | 260 |
232 } | 261 } // namespace |
233 | 262 |
234 ExtensionDispatcher::ExtensionDispatcher() | 263 ExtensionDispatcher::ExtensionDispatcher() |
235 : is_webkit_initialized_(false), | 264 : is_webkit_initialized_(false), |
236 webrequest_adblock_(false), | 265 webrequest_adblock_(false), |
237 webrequest_adblock_plus_(false), | 266 webrequest_adblock_plus_(false), |
238 webrequest_other_(false), | 267 webrequest_other_(false), |
239 source_map_(&ResourceBundle::GetSharedInstance()), | 268 source_map_(&ResourceBundle::GetSharedInstance()), |
240 chrome_channel_(chrome::VersionInfo::CHANNEL_UNKNOWN), | 269 chrome_channel_(chrome::VersionInfo::CHANNEL_UNKNOWN), |
241 event_filter_(new extensions::EventFilter) { | 270 event_filter_(new extensions::EventFilter) { |
242 const CommandLine& command_line = *(CommandLine::ForCurrentProcess()); | 271 const CommandLine& command_line = *(CommandLine::ForCurrentProcess()); |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
683 | 712 |
684 module_system->RegisterNativeHandler("chrome_hidden", | 713 module_system->RegisterNativeHandler("chrome_hidden", |
685 scoped_ptr<NativeHandler>(new ChromeHiddenNativeHandler())); | 714 scoped_ptr<NativeHandler>(new ChromeHiddenNativeHandler())); |
686 module_system->RegisterNativeHandler("print", | 715 module_system->RegisterNativeHandler("print", |
687 scoped_ptr<NativeHandler>(new PrintNativeHandler())); | 716 scoped_ptr<NativeHandler>(new PrintNativeHandler())); |
688 module_system->RegisterNativeHandler("lazy_background_page", | 717 module_system->RegisterNativeHandler("lazy_background_page", |
689 scoped_ptr<NativeHandler>(new LazyBackgroundPageNativeHandler(this))); | 718 scoped_ptr<NativeHandler>(new LazyBackgroundPageNativeHandler(this))); |
690 module_system->RegisterNativeHandler("channel", | 719 module_system->RegisterNativeHandler("channel", |
691 scoped_ptr<NativeHandler>(new ChannelNativeHandler( | 720 scoped_ptr<NativeHandler>(new ChannelNativeHandler( |
692 static_cast<chrome::VersionInfo::Channel>(chrome_channel_)))); | 721 static_cast<chrome::VersionInfo::Channel>(chrome_channel_)))); |
722 module_system->RegisterNativeHandler("logging", | |
723 scoped_ptr<NativeHandler>(new LoggingNativeHandler())); | |
693 // Create the 'chrome' variable if it doesn't already exist. | 724 // Create the 'chrome' variable if it doesn't already exist. |
694 { | 725 { |
695 v8::HandleScope handle_scope; | 726 v8::HandleScope handle_scope; |
696 v8::Handle<v8::String> chrome_string(v8::String::New("chrome")); | 727 v8::Handle<v8::String> chrome_string(v8::String::New("chrome")); |
697 v8::Handle<v8::Object> global(v8::Context::GetCurrent()->Global()); | 728 v8::Handle<v8::Object> global(v8::Context::GetCurrent()->Global()); |
698 if (global->Get(chrome_string)->IsUndefined()) | 729 if (global->Get(chrome_string)->IsUndefined()) |
699 global->Set(chrome_string, v8::Object::New()); | 730 global->Set(chrome_string, v8::Object::New()); |
700 } | 731 } |
701 | 732 |
702 // Loading JavaScript is expensive, so only run the full API bindings | 733 // Loading JavaScript is expensive, so only run the full API bindings |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1031 // APIs, they don't get extension bindings injected. If we end up here it | 1062 // APIs, they don't get extension bindings injected. If we end up here it |
1032 // means that a sandboxed page somehow managed to invoke an API anyway, so | 1063 // means that a sandboxed page somehow managed to invoke an API anyway, so |
1033 // we should abort. | 1064 // we should abort. |
1034 WebKit::WebFrame* frame = context->web_frame(); | 1065 WebKit::WebFrame* frame = context->web_frame(); |
1035 ExtensionURLInfo url_info(frame->document().securityOrigin(), | 1066 ExtensionURLInfo url_info(frame->document().securityOrigin(), |
1036 UserScriptSlave::GetDataSourceURLForFrame(frame)); | 1067 UserScriptSlave::GetDataSourceURLForFrame(frame)); |
1037 CHECK(!extensions_.IsSandboxedPage(url_info)); | 1068 CHECK(!extensions_.IsSandboxedPage(url_info)); |
1038 | 1069 |
1039 return true; | 1070 return true; |
1040 } | 1071 } |
OLD | NEW |