Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: extensions/common/extension_api.cc

Issue 183893041: Move sockets APIs out of src/chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename api targets Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « extensions/common/api/sockets_udp.idl ('k') | extensions/common/extensions_client.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/common/extension_api.h" 5 #include "extensions/common/extension_api.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/json/json_reader.h" 11 #include "base/json/json_reader.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.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 "base/values.h" 18 #include "base/values.h"
19 #include "chrome/common/extensions/api/generated_schemas.h"
20 #include "extensions/common/extension.h" 19 #include "extensions/common/extension.h"
20 #include "extensions/common/extensions_client.h"
21 #include "extensions/common/features/feature.h" 21 #include "extensions/common/features/feature.h"
22 #include "extensions/common/features/feature_provider.h" 22 #include "extensions/common/features/feature_provider.h"
23 #include "extensions/common/permissions/permission_set.h" 23 #include "extensions/common/permissions/permission_set.h"
24 #include "extensions/common/permissions/permissions_data.h" 24 #include "extensions/common/permissions/permissions_data.h"
25 #include "grit/common_resources.h" 25 #include "grit/common_resources.h"
26 #include "grit/extensions_api_resources.h" 26 #include "grit/extensions_api_resources.h"
27 #include "ui/base/resource/resource_bundle.h" 27 #include "ui/base/resource/resource_bundle.h"
28 #include "url/gurl.h" 28 #include "url/gurl.h"
29 29
30 namespace extensions { 30 namespace extensions {
31 31
32 using api::GeneratedSchemas;
33
34 namespace { 32 namespace {
35 33
36 const char* kChildKinds[] = { 34 const char* kChildKinds[] = {
37 "functions", 35 "functions",
38 "events" 36 "events"
39 }; 37 };
40 38
41 base::StringPiece ReadFromResource(int resource_id) { 39 base::StringPiece ReadFromResource(int resource_id) {
42 return ResourceBundle::GetSharedInstance().GetRawDataResource( 40 return ResourceBundle::GetSharedInstance().GetRawDataResource(
43 resource_id); 41 resource_id);
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 } 191 }
194 192
195 *feature_type = full_name.substr(0, colon_index); 193 *feature_type = full_name.substr(0, colon_index);
196 *feature_name = full_name.substr(colon_index + 1); 194 *feature_name = full_name.substr(colon_index + 1);
197 } 195 }
198 196
199 void ExtensionAPI::LoadSchema(const std::string& name, 197 void ExtensionAPI::LoadSchema(const std::string& name,
200 const base::StringPiece& schema) { 198 const base::StringPiece& schema) {
201 scoped_ptr<base::ListValue> schema_list(LoadSchemaList(name, schema)); 199 scoped_ptr<base::ListValue> schema_list(LoadSchemaList(name, schema));
202 std::string schema_namespace; 200 std::string schema_namespace;
203 201 extensions::ExtensionsClient* extensions_client =
202 extensions::ExtensionsClient::Get();
203 DCHECK(extensions_client);
204 while (!schema_list->empty()) { 204 while (!schema_list->empty()) {
205 base::DictionaryValue* schema = NULL; 205 base::DictionaryValue* schema = NULL;
206 { 206 {
207 scoped_ptr<base::Value> value; 207 scoped_ptr<base::Value> value;
208 schema_list->Remove(schema_list->GetSize() - 1, &value); 208 schema_list->Remove(schema_list->GetSize() - 1, &value);
209 CHECK(value.release()->GetAsDictionary(&schema)); 209 CHECK(value.release()->GetAsDictionary(&schema));
210 } 210 }
211 211
212 CHECK(schema->GetString("namespace", &schema_namespace)); 212 CHECK(schema->GetString("namespace", &schema_namespace));
213 PrefixWithNamespace(schema_namespace, schema); 213 PrefixWithNamespace(schema_namespace, schema);
214 schemas_[schema_namespace] = make_linked_ptr(schema); 214 schemas_[schema_namespace] = make_linked_ptr(schema);
215 if (!GeneratedSchemas::IsGenerated(schema_namespace)) 215 if (!extensions_client->IsAPISchemaGenerated(schema_namespace))
216 CHECK_EQ(1u, unloaded_schemas_.erase(schema_namespace)); 216 CHECK_EQ(1u, unloaded_schemas_.erase(schema_namespace));
217 } 217 }
218 } 218 }
219 219
220 ExtensionAPI::ExtensionAPI() : default_configuration_initialized_(false) { 220 ExtensionAPI::ExtensionAPI() : default_configuration_initialized_(false) {
221 } 221 }
222 222
223 ExtensionAPI::~ExtensionAPI() { 223 ExtensionAPI::~ExtensionAPI() {
224 } 224 }
225 225
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 const std::string& full_name) { 337 const std::string& full_name) {
338 std::string child_name; 338 std::string child_name;
339 std::string api_name = GetAPINameFromFullName(full_name, &child_name); 339 std::string api_name = GetAPINameFromFullName(full_name, &child_name);
340 340
341 const base::DictionaryValue* result = NULL; 341 const base::DictionaryValue* result = NULL;
342 SchemaMap::iterator maybe_schema = schemas_.find(api_name); 342 SchemaMap::iterator maybe_schema = schemas_.find(api_name);
343 if (maybe_schema != schemas_.end()) { 343 if (maybe_schema != schemas_.end()) {
344 result = maybe_schema->second.get(); 344 result = maybe_schema->second.get();
345 } else { 345 } else {
346 // Might not have loaded yet; or might just not exist. 346 // Might not have loaded yet; or might just not exist.
347 UnloadedSchemaMap::iterator maybe_schema_resource = 347 UnloadedSchemaMap::iterator maybe_schema_resource =
348 unloaded_schemas_.find(api_name); 348 unloaded_schemas_.find(api_name);
349 extensions::ExtensionsClient* extensions_client =
350 extensions::ExtensionsClient::Get();
351 DCHECK(extensions_client);
349 if (maybe_schema_resource != unloaded_schemas_.end()) { 352 if (maybe_schema_resource != unloaded_schemas_.end()) {
350 LoadSchema(maybe_schema_resource->first, 353 LoadSchema(maybe_schema_resource->first,
351 ReadFromResource(maybe_schema_resource->second)); 354 ReadFromResource(maybe_schema_resource->second));
352 } else if (default_configuration_initialized_ && 355 } else if (default_configuration_initialized_ &&
353 GeneratedSchemas::IsGenerated(api_name)) { 356 extensions_client->IsAPISchemaGenerated(api_name)) {
354 LoadSchema(api_name, GeneratedSchemas::Get(api_name)); 357 LoadSchema(api_name, extensions_client->GetAPISchema(api_name));
355 } else { 358 } else {
356 return NULL; 359 return NULL;
357 } 360 }
358 361
359 maybe_schema = schemas_.find(api_name); 362 maybe_schema = schemas_.find(api_name);
360 CHECK(schemas_.end() != maybe_schema); 363 CHECK(schemas_.end() != maybe_schema);
361 result = maybe_schema->second.get(); 364 result = maybe_schema->second.get();
362 } 365 }
363 366
364 if (!child_name.empty()) 367 if (!child_name.empty())
(...skipping 18 matching lines...) Expand all
383 std::string child_name; 386 std::string child_name;
384 feature = provider->second->GetFeature( 387 feature = provider->second->GetFeature(
385 GetAPINameFromFullName(feature_name, &child_name)); 388 GetAPINameFromFullName(feature_name, &child_name));
386 } 389 }
387 return feature; 390 return feature;
388 } 391 }
389 392
390 std::string ExtensionAPI::GetAPINameFromFullName(const std::string& full_name, 393 std::string ExtensionAPI::GetAPINameFromFullName(const std::string& full_name,
391 std::string* child_name) { 394 std::string* child_name) {
392 std::string api_name_candidate = full_name; 395 std::string api_name_candidate = full_name;
396 extensions::ExtensionsClient* extensions_client =
397 extensions::ExtensionsClient::Get();
398 DCHECK(extensions_client);
393 while (true) { 399 while (true) {
394 if (schemas_.find(api_name_candidate) != schemas_.end() || 400 if (schemas_.find(api_name_candidate) != schemas_.end() ||
395 GeneratedSchemas::IsGenerated(api_name_candidate) || 401 extensions_client->IsAPISchemaGenerated(api_name_candidate) ||
396 unloaded_schemas_.find(api_name_candidate) != unloaded_schemas_.end()) { 402 unloaded_schemas_.find(api_name_candidate) != unloaded_schemas_.end()) {
397 std::string result = api_name_candidate; 403 std::string result = api_name_candidate;
398 404
399 if (child_name) { 405 if (child_name) {
400 if (result.length() < full_name.length()) 406 if (result.length() < full_name.length())
401 *child_name = full_name.substr(result.length() + 1); 407 *child_name = full_name.substr(result.length() + 1);
402 else 408 else
403 *child_name = ""; 409 *child_name = "";
404 } 410 }
405 411
406 return result; 412 return result;
407 } 413 }
408 414
409 size_t last_dot_index = api_name_candidate.rfind('.'); 415 size_t last_dot_index = api_name_candidate.rfind('.');
410 if (last_dot_index == std::string::npos) 416 if (last_dot_index == std::string::npos)
411 break; 417 break;
412 418
413 api_name_candidate = api_name_candidate.substr(0, last_dot_index); 419 api_name_candidate = api_name_candidate.substr(0, last_dot_index);
414 } 420 }
415 421
416 *child_name = ""; 422 *child_name = "";
417 return std::string(); 423 return std::string();
418 } 424 }
419 425
420 } // namespace extensions 426 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/api/sockets_udp.idl ('k') | extensions/common/extensions_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698