OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/renderer/script_context.h" | 5 #include "extensions/renderer/script_context.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/string_split.h" | 9 #include "base/strings/string_split.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 v8_context_(v8_context->GetIsolate(), v8_context), | 89 v8_context_(v8_context->GetIsolate(), v8_context), |
90 web_frame_(web_frame), | 90 web_frame_(web_frame), |
91 extension_(extension), | 91 extension_(extension), |
92 context_type_(context_type), | 92 context_type_(context_type), |
93 effective_extension_(effective_extension), | 93 effective_extension_(effective_extension), |
94 effective_context_type_(effective_context_type), | 94 effective_context_type_(effective_context_type), |
95 safe_builtins_(this), | 95 safe_builtins_(this), |
96 isolate_(v8_context->GetIsolate()), | 96 isolate_(v8_context->GetIsolate()), |
97 url_(web_frame_ ? GetDataSourceURLForFrame(web_frame_) : GURL()), | 97 url_(web_frame_ ? GetDataSourceURLForFrame(web_frame_) : GURL()), |
98 runner_(new Runner(this)) { | 98 runner_(new Runner(this)) { |
99 VLOG(1) << "Created context:\n" | 99 VLOG(1) << "Created context:\n" << GetDebugString(); |
100 << " extension id: " << GetExtensionID() << "\n" | |
101 << " frame: " << web_frame_ << "\n" | |
102 << " URL: " << GetURL() << "\n" | |
103 << " context type: " << GetContextTypeDescription() << "\n" | |
104 << " effective extension id: " | |
105 << (effective_extension_.get() ? effective_extension_->id() : "") | |
106 << " effective context type: " | |
107 << GetEffectiveContextTypeDescription(); | |
108 gin::PerContextData* gin_data = gin::PerContextData::From(v8_context); | 100 gin::PerContextData* gin_data = gin::PerContextData::From(v8_context); |
109 CHECK(gin_data); // may fail if the v8::Context hasn't been registered yet | 101 CHECK(gin_data); // may fail if the v8::Context hasn't been registered yet |
110 gin_data->set_runner(runner_.get()); | 102 gin_data->set_runner(runner_.get()); |
111 } | 103 } |
112 | 104 |
113 ScriptContext::~ScriptContext() { | 105 ScriptContext::~ScriptContext() { |
114 VLOG(1) << "Destroyed context for extension\n" | 106 VLOG(1) << "Destroyed context for extension\n" |
115 << " extension id: " << GetExtensionID() << "\n" | 107 << " extension id: " << GetExtensionID() << "\n" |
116 << " effective extension id: " | 108 << " effective extension id: " |
117 << (effective_extension_.get() ? effective_extension_->id() : ""); | 109 << (effective_extension_.get() ? effective_extension_->id() : ""); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 module_system_->CallModuleMethod( | 218 module_system_->CallModuleMethod( |
227 kEventBindings, "dispatchEvent", arraysize(argv), argv); | 219 kEventBindings, "dispatchEvent", arraysize(argv), argv); |
228 } | 220 } |
229 | 221 |
230 void ScriptContext::DispatchOnUnloadEvent() { | 222 void ScriptContext::DispatchOnUnloadEvent() { |
231 v8::HandleScope handle_scope(isolate()); | 223 v8::HandleScope handle_scope(isolate()); |
232 v8::Context::Scope context_scope(v8_context()); | 224 v8::Context::Scope context_scope(v8_context()); |
233 module_system_->CallModuleMethod("unload_event", "dispatch"); | 225 module_system_->CallModuleMethod("unload_event", "dispatch"); |
234 } | 226 } |
235 | 227 |
236 std::string ScriptContext::GetContextTypeDescription() { | 228 std::string ScriptContext::GetContextTypeDescription() const { |
237 return GetContextTypeDescriptionString(context_type_); | 229 return GetContextTypeDescriptionString(context_type_); |
238 } | 230 } |
239 | 231 |
240 std::string ScriptContext::GetEffectiveContextTypeDescription() { | 232 std::string ScriptContext::GetEffectiveContextTypeDescription() const { |
241 return GetContextTypeDescriptionString(effective_context_type_); | 233 return GetContextTypeDescriptionString(effective_context_type_); |
242 } | 234 } |
243 | 235 |
244 GURL ScriptContext::GetURL() const { | 236 GURL ScriptContext::GetURL() const { |
245 return url_; | 237 return url_; |
246 } | 238 } |
247 | 239 |
248 bool ScriptContext::IsAnyFeatureAvailableToContext(const Feature& api) { | 240 bool ScriptContext::IsAnyFeatureAvailableToContext(const Feature& api) { |
249 return ExtensionAPI::GetSharedInstance()->IsAnyFeatureAvailableToContext( | 241 return ExtensionAPI::GetSharedInstance()->IsAnyFeatureAvailableToContext( |
250 api, extension(), context_type(), GetDataSourceURLForFrame(web_frame())); | 242 api, extension(), context_type(), GetDataSourceURLForFrame(web_frame())); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 Feature::Availability availability = GetAvailability(name); | 358 Feature::Availability availability = GetAvailability(name); |
367 if (!availability.is_available()) { | 359 if (!availability.is_available()) { |
368 isolate()->ThrowException(v8::Exception::Error( | 360 isolate()->ThrowException(v8::Exception::Error( |
369 v8::String::NewFromUtf8(isolate(), availability.message().c_str()))); | 361 v8::String::NewFromUtf8(isolate(), availability.message().c_str()))); |
370 return false; | 362 return false; |
371 } | 363 } |
372 | 364 |
373 return true; | 365 return true; |
374 } | 366 } |
375 | 367 |
| 368 std::string ScriptContext::GetDebugString() const { |
| 369 return base::StringPrintf( |
| 370 " extension id: %s\n" |
| 371 " frame: %p\n" |
| 372 " URL: %s\n" |
| 373 " context_type: %s\n" |
| 374 " effective extension id: %s\n" |
| 375 " effective context type: %s", |
| 376 extension_.get() ? extension_->id().c_str() : "(none)", web_frame_, |
| 377 GetURL().spec().c_str(), GetContextTypeDescription().c_str(), |
| 378 effective_extension_.get() ? effective_extension_->id().c_str() |
| 379 : "(none)", |
| 380 GetEffectiveContextTypeDescription().c_str()); |
| 381 } |
| 382 |
376 ScriptContext::Runner::Runner(ScriptContext* context) : context_(context) { | 383 ScriptContext::Runner::Runner(ScriptContext* context) : context_(context) { |
377 } | 384 } |
378 | 385 |
379 void ScriptContext::Runner::Run(const std::string& source, | 386 void ScriptContext::Runner::Run(const std::string& source, |
380 const std::string& resource_name) { | 387 const std::string& resource_name) { |
381 context_->module_system()->RunString(source, resource_name); | 388 context_->module_system()->RunString(source, resource_name); |
382 } | 389 } |
383 | 390 |
384 v8::Local<v8::Value> ScriptContext::Runner::Call( | 391 v8::Local<v8::Value> ScriptContext::Runner::Call( |
385 v8::Local<v8::Function> function, | 392 v8::Local<v8::Function> function, |
386 v8::Local<v8::Value> receiver, | 393 v8::Local<v8::Value> receiver, |
387 int argc, | 394 int argc, |
388 v8::Local<v8::Value> argv[]) { | 395 v8::Local<v8::Value> argv[]) { |
389 return context_->CallFunction(function, argc, argv); | 396 return context_->CallFunction(function, argc, argv); |
390 } | 397 } |
391 | 398 |
392 gin::ContextHolder* ScriptContext::Runner::GetContextHolder() { | 399 gin::ContextHolder* ScriptContext::Runner::GetContextHolder() { |
393 v8::HandleScope handle_scope(context_->isolate()); | 400 v8::HandleScope handle_scope(context_->isolate()); |
394 return gin::PerContextData::From(context_->v8_context())->context_holder(); | 401 return gin::PerContextData::From(context_->v8_context())->context_holder(); |
395 } | 402 } |
396 | 403 |
397 } // namespace extensions | 404 } // namespace extensions |
OLD | NEW |