Chromium Code Reviews| Index: chrome/renderer/extensions/schema_generated_bindings.cc |
| diff --git a/chrome/renderer/extensions/schema_generated_bindings.cc b/chrome/renderer/extensions/schema_generated_bindings.cc |
| index 462155a0a73fc46155a38809966226dfe9af5bd6..32e18cc8f1941f8c7fe4251036d2c25ce6a417a5 100644 |
| --- a/chrome/renderer/extensions/schema_generated_bindings.cc |
| +++ b/chrome/renderer/extensions/schema_generated_bindings.cc |
| @@ -54,8 +54,6 @@ namespace { |
| const char* kExtensionDeps[] = { |
| "extensions/event.js", |
| "extensions/json_schema.js", |
| - "extensions/miscellaneous_bindings.js", |
| - "extensions/apitest.js" |
| }; |
| // Contains info relevant to a pending API request. |
| @@ -142,20 +140,38 @@ class ExtensionImpl : public ChromeV8Extension { |
| ChromeV8Context* v8_context = dispatcher->v8_context_set().GetCurrent(); |
| CHECK(v8_context); |
| - std::string extension_id = v8_context->extension_id(); |
| ExtensionAPI::SchemaMap schemas; |
| - ExtensionAPI::GetSchemasFilter filter = |
| - dispatcher->is_extension_process() ? |
| - ExtensionAPI::ALL : ExtensionAPI::ONLY_UNPRIVILEGED; |
| + |
| + std::string extension_id = v8_context->extension_id(); |
| + // An Extension may not be found, but CHECK that as required. |
| + const ::Extension* extension = |
| + dispatcher->extensions()->GetByID(extension_id); |
| if (dispatcher->IsTestExtensionId(extension_id)) { |
| - ExtensionAPI::GetInstance()->GetDefaultSchemas(filter, &schemas); |
| + ExtensionAPI::GetInstance()->GetDefaultSchemas( |
| + ExtensionAPI::ONLY_UNPRIVILEGED, &schemas); |
| } else { |
| - const ::Extension* extension = |
| - dispatcher->extensions()->GetByID(extension_id); |
| - CHECK(extension) << extension_id << " not found"; |
| - ExtensionAPI::GetInstance()->GetSchemasForExtension( |
| - *extension, filter, &schemas); |
| + switch (v8_context->context_type()) { |
| + case ChromeV8Context::PRIVILEGED: |
| + CHECK(extension) << extension_id << " not found"; |
| + ExtensionAPI::GetInstance()->GetSchemasForExtension( |
|
Aaron Boodman
2012/02/29 01:03:58
Is it possible to consolidate this knowledge into
not at google - send to devlin
2012/03/05 07:46:54
Done. This is much nicer (I actually made it just
|
| + *extension, ExtensionAPI::ALL, &schemas); |
| + break; |
| + |
| + case ChromeV8Context::CONTENT_SCRIPT: |
| + case ChromeV8Context::UNPRIVILEGED: |
| + CHECK(extension) << extension_id << " not found"; |
| + ExtensionAPI::GetInstance()->GetSchemasForExtension( |
| + *extension, ExtensionAPI::ONLY_UNPRIVILEGED, &schemas); |
| + break; |
| + |
| + case ChromeV8Context::WEB_PAGE: |
| + ExtensionAPI::GetInstance()->GetSchemasForURL( |
| + UserScriptSlave::GetDataSourceURLForFrame( |
| + v8_context->web_frame()), |
| + &schemas); |
| + break; |
| + } |
| } |
| v8::Persistent<v8::Context> context(v8::Context::New()); |
| @@ -164,8 +180,7 @@ class ExtensionImpl : public ChromeV8Extension { |
| size_t api_index = 0; |
| for (ExtensionAPI::SchemaMap::iterator it = schemas.begin(); |
| it != schemas.end(); ++it) { |
| - std::string api_name = it->first; |
| - api->Set(api_index, GetV8SchemaForAPI(self, context, api_name)); |
| + api->Set(api_index, GetV8SchemaForAPI(self, context, it->first)); |
| ++api_index; |
| } |