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

Unified Diff: chrome/common/extensions/docs/server2/api_models.py

Issue 375133002: Docserver: Display API features that are available to content scripts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/api_models.py
diff --git a/chrome/common/extensions/docs/server2/api_models.py b/chrome/common/extensions/docs/server2/api_models.py
index 673dc434661fe18a297217db4f0bbf02d84716c2..0551abc751b9b16b835b5c6b1c4411ba3f126217 100644
--- a/chrome/common/extensions/docs/server2/api_models.py
+++ b/chrome/common/extensions/docs/server2/api_models.py
@@ -7,9 +7,10 @@ import posixpath
from compiled_file_system import SingleFile, Unicode
from docs_server_utils import StringIdentity
from extensions_paths import API_PATHS
-from features_bundle import HasParentFeature
+from features_bundle import HasParentFeature, GetParentFeature
from file_system import FileNotFoundError
from future import Collect, Future
+from operator import itemgetter
from platform_util import PlatformToExtensionType
from schema_util import ProcessSchema
from third_party.json_schema_compiler.json_schema import DeleteNodes
@@ -24,11 +25,13 @@ class APIModels(object):
features_bundle,
compiled_fs_factory,
file_system,
+ object_store_creator,
platform):
self._features_bundle = features_bundle
self._platform = PlatformToExtensionType(platform)
self._model_cache = compiled_fs_factory.Create(
file_system, self._CreateAPIModel, APIModels, category=self._platform)
+ self._object_store = object_store_creator.Create(APIModels)
@SingleFile
@Unicode
@@ -97,6 +100,69 @@ class APIModels(object):
futures[0].Get()
return Future(callback=resolve)
+ def GetContentScriptsAPIs(self):
not at google - send to devlin 2014/07/09 02:55:55 s/GetContentScriptsAPIs/GetContentScriptAPIs/
+ '''Creates a dict of APIs and nodes supported by content scripts in
+ this format:
+
+ {
+ 'extension': {
+ 'name': 'extension',
not at google - send to devlin 2014/07/09 02:55:55 Can we return an actual type rather than a diction
+ 'fullSupport': False,
not at google - send to devlin 2014/07/09 02:55:55 'allNodes' might be more consistent with 'supporte
+ 'supportedNodes': [{
+ 'parent': 'extension',
+ 'node': sendMessage
+ },
+ ...
+ ]
+ },
+ ...
+ }
+ '''
+ content_script_apis_future = self._object_store.Get('content_script_apis')
+ api_features_future = self._features_bundle.GetAPIFeatures()
+ def resolve():
+ content_script_apis = content_script_apis_future.Get()
+ api_features = api_features_future.Get()
not at google - send to devlin 2014/07/09 02:55:55 you don't need to resolve this is if content_scrip
+ if content_script_apis is not None:
+ return content_script_apis
+
+ content_script_apis = {}
+ for feature in api_features.itervalues():
+ # Gets all the features that have 'content_script' in their context.
+ if 'content_script' in feature.get('contexts', ()):
not at google - send to devlin 2014/07/09 02:55:55 early-continue
+ parent = GetParentFeature(feature['name'], feature, api_features)
+ # If it has no parent, then the API is fully supported.
+ if parent is None:
+ content_script_apis[feature['name']] = {
+ 'name': feature['name'],
+ 'fullSupport': True,
+ 'supportedNodes': []
+ }
+ else:
+ # Creates a dict for the individual node.
+ node = {'parent': parent, 'node': feature['name'][len(parent) + 1:]}
+ # Initializes the supportedNodes list if it doesn't exist yet.
+ if parent not in content_script_apis:
+ content_script_apis[parent] = {
+ 'name': parent,
+ 'fullSupport': False,
+ 'supportedNodes': [node]
+ }
+ else:
+ content_script_apis[parent]['supportedNodes'].append(node)
+
+ # Sort all of the supportedNodes.
+ for content_script_api in content_script_apis.itervalues():
+ if content_script_api['supportedNodes']:
+ content_script_api['supportedNodes'].sort(key=itemgetter('node'))
+ # Annotate the first and last ones for use in the templates.
+ content_script_api['supportedNodes'][0]['first'] = True
+ content_script_api['supportedNodes'][-1]['last'] = True
+
+ self._object_store.Set('content_script_apis', content_script_apis)
+ return content_script_apis
+ return Future(callback=resolve)
+
def Cron(self):
futures = [self.GetModel(name) for name in self.GetNames()]
return Collect(futures, except_pass=(FileNotFoundError, ValueError))

Powered by Google App Engine
This is Rietveld 408576698