Chromium Code Reviews| Index: chrome/renderer/extensions/chrome_v8_context.cc |
| diff --git a/chrome/renderer/extensions/chrome_v8_context.cc b/chrome/renderer/extensions/chrome_v8_context.cc |
| index a9c221fefcf9cc587d2997973320b13898b53e50..268279b66436aab1d4342be823997f0d3774256c 100644 |
| --- a/chrome/renderer/extensions/chrome_v8_context.cc |
| +++ b/chrome/renderer/extensions/chrome_v8_context.cc |
| @@ -23,6 +23,7 @@ namespace extensions { |
| namespace { |
| const char kChromeHidden[] = "chromeHidden"; |
| +const char kUnavailableMessage[] = "API is unavailable."; |
|
not at google - send to devlin
2013/02/15 22:26:17
Ok, let's make this nice and informative.
"you do
cduvall
2013/02/19 23:58:49
Done.
not at google - send to devlin
2013/02/20 00:36:38
Nice, could you make "this API" be %s and use Stri
not at google - send to devlin
2013/02/20 00:49:29
Never mind, being dumb. Ignore.
|
| #ifndef NDEBUG |
| const char kValidateCallbacks[] = "validateCallbacks"; |
| @@ -39,7 +40,8 @@ ChromeV8Context::ChromeV8Context(v8::Handle<v8::Context> v8_context, |
| v8_context)), |
| web_frame_(web_frame), |
| extension_(extension), |
| - context_type_(context_type) { |
| + context_type_(context_type), |
| + available_extension_apis_initialized_(false) { |
| VLOG(1) << "Created context:\n" |
| << " extension id: " << GetExtensionID() << "\n" |
| << " frame: " << web_frame_ << "\n" |
| @@ -68,11 +70,11 @@ v8::Handle<v8::Value> ChromeV8Context::GetOrCreateChromeHidden( |
| global->SetHiddenValue(v8::String::New(kChromeHidden), hidden); |
| #ifndef NDEBUG |
| - // Tell schema_generated_bindings.js to validate callbacks and events |
| - // against their schema definitions. |
| + // Tell bindings.js to validate callbacks and events against their schema |
| + // definitions. |
| v8::Local<v8::Object>::Cast(hidden)->Set( |
| v8::String::New(kValidateCallbacks), v8::True()); |
| - // Tell schema_generated_bindings.js to validate API for ambiguity. |
| + // Tell bindings.js to validate API for ambiguity. |
| v8::Local<v8::Object>::Cast(hidden)->Set( |
| v8::String::New(kValidateAPI), v8::True()); |
| #endif |
| @@ -143,15 +145,26 @@ bool ChromeV8Context::CallChromeHiddenMethod( |
| } |
| const std::set<std::string>& ChromeV8Context::GetAvailableExtensionAPIs() { |
| - if (!available_extension_apis_.get()) { |
| + if (!available_extension_apis_initialized_) { |
| available_extension_apis_ = |
| ExtensionAPI::GetSharedInstance()->GetAPIsForContext( |
| context_type_, |
| extension_, |
| - UserScriptSlave::GetDataSourceURLForFrame( |
| - web_frame_)).Pass(); |
| + UserScriptSlave::GetDataSourceURLForFrame(web_frame_)); |
| + available_extension_apis_initialized_ = true; |
| } |
| - return *(available_extension_apis_.get()); |
| + return available_extension_apis_; |
| +} |
| + |
| +Feature::Availability ChromeV8Context::GetAvailability( |
| + const std::string& api_name) { |
| + const std::set<std::string>& available_apis = GetAvailableExtensionAPIs(); |
| + |
| + if (available_apis.find(api_name) != available_apis.end()) |
|
not at google - send to devlin
2013/02/15 22:26:17
Call ExtensionAPI::IsAvailable?
cduvall
2013/02/19 23:58:49
IsAvailable() only works for Features. I added a T
|
| + return Feature::CreateAvailability(Feature::IS_AVAILABLE, ""); |
| + |
| + return Feature::CreateAvailability(Feature::INVALID_CONTEXT, |
| + kUnavailableMessage); |
| } |
| void ChromeV8Context::DispatchOnLoadEvent(bool is_incognito_process, |