| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 import json | 5 import json |
| 6 import logging | 6 import logging |
| 7 import posixpath | 7 import posixpath |
| 8 import re | 8 import re |
| 9 import traceback | 9 import traceback |
| 10 | 10 |
| 11 from extensions_paths import EXAMPLES | 11 from extensions_paths import EXAMPLES |
| 12 import third_party.json_schema_compiler.json_comment_eater as json_comment_eater | 12 import third_party.json_schema_compiler.json_comment_eater as json_comment_eater |
| 13 import url_constants | 13 import url_constants |
| 14 | 14 |
| 15 | 15 |
| 16 _DEFAULT_ICON_PATH = 'images/sample-default-icon.png' | 16 _DEFAULT_ICON_PATH = 'images/sample-default-icon.png' |
| 17 | 17 |
| 18 | 18 |
| 19 class SamplesDataSource(object): | 19 class SamplesDataSource(object): |
| 20 '''Constructs a list of samples and their respective files and api calls. | 20 '''Constructs a list of samples and their respective files and api calls. |
| 21 ''' | 21 ''' |
| 22 class Factory(object): | 22 class Factory(object): |
| 23 '''A factory to create SamplesDataSource instances bound to individual | 23 '''A factory to create SamplesDataSource instances bound to individual |
| 24 Requests. | 24 Requests. |
| 25 ''' | 25 ''' |
| 26 def __init__(self, | 26 def __init__(self, |
| 27 host_file_system, | 27 host_file_system, |
| 28 app_samples_file_system, | 28 app_samples_file_system, |
| 29 compiled_fs_factory, | 29 compiled_fs_factory, |
| 30 ref_resolver, | 30 platform_bundle, |
| 31 base_path): | 31 base_path): |
| 32 self._host_file_system = host_file_system | 32 self._host_file_system = host_file_system |
| 33 self._app_samples_file_system = app_samples_file_system | 33 self._app_samples_file_system = app_samples_file_system |
| 34 self._ref_resolver = ref_resolver | 34 self._platform_bundle = platform_bundle |
| 35 self._base_path = base_path | 35 self._base_path = base_path |
| 36 self._extensions_cache = compiled_fs_factory.Create( | 36 self._extensions_cache = compiled_fs_factory.Create( |
| 37 host_file_system, | 37 host_file_system, |
| 38 self._MakeSamplesList, | 38 self._MakeSamplesList, |
| 39 SamplesDataSource, | 39 SamplesDataSource, |
| 40 category='extensions') | 40 category='extensions') |
| 41 self._extensions_text_cache = compiled_fs_factory.ForUnicode( | 41 self._extensions_text_cache = compiled_fs_factory.ForUnicode( |
| 42 host_file_system) | 42 host_file_system) |
| 43 self._apps_cache = compiled_fs_factory.Create( | 43 self._apps_cache = compiled_fs_factory.Create( |
| 44 app_samples_file_system, | 44 app_samples_file_system, |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 api_calls = [] | 129 api_calls = [] |
| 130 for item in sorted(api_items): | 130 for item in sorted(api_items): |
| 131 if len(item.split('.')) < 3: | 131 if len(item.split('.')) < 3: |
| 132 continue | 132 continue |
| 133 if item.endswith('.removeListener') or item.endswith('.hasListener'): | 133 if item.endswith('.removeListener') or item.endswith('.hasListener'): |
| 134 continue | 134 continue |
| 135 if item.endswith('.addListener'): | 135 if item.endswith('.addListener'): |
| 136 item = item[:-len('.addListener')] | 136 item = item[:-len('.addListener')] |
| 137 if item.startswith('chrome.'): | 137 if item.startswith('chrome.'): |
| 138 item = item[len('chrome.'):] | 138 item = item[len('chrome.'):] |
| 139 ref_data = self._ref_resolver.GetLink(item) | 139 ref_data = self._platform_bundle.GetReferenceResolver( |
| 140 'apps' if is_apps else 'extensions').GetLink(item) |
| 140 # TODO(kalman): What about references like chrome.storage.sync.get? | 141 # TODO(kalman): What about references like chrome.storage.sync.get? |
| 141 # That should link to either chrome.storage.sync or | 142 # That should link to either chrome.storage.sync or |
| 142 # chrome.storage.StorageArea.get (or probably both). | 143 # chrome.storage.StorageArea.get (or probably both). |
| 143 # TODO(kalman): Filter out API-only references? This can happen when | 144 # TODO(kalman): Filter out API-only references? This can happen when |
| 144 # the API namespace is assigned to a variable, but it's very hard to | 145 # the API namespace is assigned to a variable, but it's very hard to |
| 145 # to disambiguate. | 146 # to disambiguate. |
| 146 if ref_data is None: | 147 if ref_data is None: |
| 147 continue | 148 continue |
| 148 api_calls.append({ | 149 api_calls.append({ |
| 149 'name': ref_data['text'], | 150 'name': ref_data['text'], |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 else: | 244 else: |
| 244 dict_['id'] = self._GetSampleId(name) | 245 dict_['id'] = self._GetSampleId(name) |
| 245 return_list.append(dict_) | 246 return_list.append(dict_) |
| 246 return return_list | 247 return return_list |
| 247 | 248 |
| 248 def get(self, key): | 249 def get(self, key): |
| 249 return { | 250 return { |
| 250 'apps': lambda: self._CreateSamplesDict('apps'), | 251 'apps': lambda: self._CreateSamplesDict('apps'), |
| 251 'extensions': lambda: self._CreateSamplesDict('extensions') | 252 'extensions': lambda: self._CreateSamplesDict('extensions') |
| 252 }.get(key, lambda: {})() | 253 }.get(key, lambda: {})() |
| OLD | NEW |