summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorahernandez.miralles@gmail.com <ahernandez.miralles@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-29 00:11:57 +0000
committerahernandez.miralles@gmail.com <ahernandez.miralles@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-29 00:11:57 +0000
commit21ffc56f7c207883d828d54298cc1b42dfa0db14 (patch)
treee66f45c5aa91be9d4362be5670b189ed3c0895b3 /chrome
parentddf24c1e52a728099b4e3c220ba82bad331ed6b2 (diff)
downloadchromium_src-21ffc56f7c207883d828d54298cc1b42dfa0db14.zip
chromium_src-21ffc56f7c207883d828d54298cc1b42dfa0db14.tar.gz
chromium_src-21ffc56f7c207883d828d54298cc1b42dfa0db14.tar.bz2
Remove ReferenceResolver dependency in APIDataSource.
This is the first step towards moving APIDataSource to DataSourceRegistry BUG=275039 NOTRY=true Review URL: https://codereview.chromium.org/216943006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260316 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/common/extensions/docs/server2/api_data_source.py34
-rwxr-xr-xchrome/common/extensions/docs/server2/api_data_source_test.py34
-rwxr-xr-xchrome/common/extensions/docs/server2/cron_servlet_test.py6
-rw-r--r--chrome/common/extensions/docs/server2/document_renderer.py2
-rwxr-xr-xchrome/common/extensions/docs/server2/document_renderer_test.py20
-rw-r--r--chrome/common/extensions/docs/server2/reference_resolver.py15
-rw-r--r--chrome/common/extensions/docs/server2/samples_data_source.py4
-rw-r--r--chrome/common/extensions/docs/server2/server_instance.py13
-rw-r--r--chrome/common/extensions/docs/templates/private/ref_link.html2
9 files changed, 37 insertions, 93 deletions
diff --git a/chrome/common/extensions/docs/server2/api_data_source.py b/chrome/common/extensions/docs/server2/api_data_source.py
index ebb0c24..04a6eac 100644
--- a/chrome/common/extensions/docs/server2/api_data_source.py
+++ b/chrome/common/extensions/docs/server2/api_data_source.py
@@ -68,14 +68,12 @@ class _JSCModel(object):
def __init__(self,
api_name,
api_models,
- ref_resolver,
disable_refs,
availability_finder,
json_cache,
template_cache,
features_bundle,
event_byname_function):
- self._ref_resolver = ref_resolver
self._disable_refs = disable_refs
self._availability_finder = availability_finder
self._api_availabilities = json_cache.GetFromFile(
@@ -87,17 +85,9 @@ class _JSCModel(object):
self._event_byname_function = event_byname_function
self._namespace = api_models.GetModel(api_name).Get()
- def _FormatDescription(self, description):
- if self._disable_refs:
- return description
- return self._ref_resolver.ResolveAllLinks(description,
- namespace=self._namespace.name)
-
def _GetLink(self, link):
- if self._disable_refs:
- type_name = link.split('.', 1)[-1]
- return { 'href': '#type-%s' % type_name, 'text': link, 'name': link }
- return self._ref_resolver.SafeGetLink(link, namespace=self._namespace.name)
+ ref = link if '.' in link else (self._namespace.name + '.' + link)
+ return { 'ref': ref, 'text': link, 'name': link }
def ToDict(self):
if self._namespace is None:
@@ -145,7 +135,7 @@ class _JSCModel(object):
def _GenerateType(self, type_):
type_dict = {
'name': type_.simple_name,
- 'description': self._FormatDescription(type_.description),
+ 'description': type_.description,
'properties': self._GenerateProperties(type_.properties),
'functions': self._GenerateFunctions(type_.functions),
'events': self._GenerateEvents(type_.events),
@@ -160,7 +150,7 @@ class _JSCModel(object):
def _GenerateFunction(self, function):
function_dict = {
'name': function.simple_name,
- 'description': self._FormatDescription(function.description),
+ 'description': function.description,
'callback': self._GenerateCallback(function.callback),
'parameters': [],
'returns': None,
@@ -190,7 +180,7 @@ class _JSCModel(object):
def _GenerateEvent(self, event):
event_dict = {
'name': event.simple_name,
- 'description': self._FormatDescription(event.description),
+ 'description': event.description,
'filters': [self._GenerateProperty(f) for f in event.filters],
'conditions': [self._GetLink(condition)
for condition in event.conditions],
@@ -267,7 +257,7 @@ class _JSCModel(object):
property_dict = {
'name': property_.simple_name,
'optional': property_.optional,
- 'description': self._FormatDescription(property_.description),
+ 'description': property_.description,
'properties': self._GenerateProperties(type_.properties),
'functions': self._GenerateFunctions(type_.functions),
'parameters': [],
@@ -297,7 +287,7 @@ class _JSCModel(object):
def _GenerateCallbackProperty(self, callback):
property_dict = {
'name': callback.simple_name,
- 'description': self._FormatDescription(callback.description),
+ 'description': callback.description,
'optional': callback.optional,
'is_callback': True,
'id': _CreateId(callback, 'property'),
@@ -357,7 +347,7 @@ class _JSCModel(object):
return {
'title': 'Description',
'content': [
- { 'text': self._FormatDescription(self._namespace.description) }
+ { 'text': self._namespace.description }
]
}
@@ -455,8 +445,7 @@ class _JSCModel(object):
def _AddCommonProperties(self, target, src):
if src.deprecated is not None:
- target['deprecated'] = self._FormatDescription(
- src.deprecated)
+ target['deprecated'] = src.deprecated
if (src.parent is not None and
not isinstance(src.parent, model.Namespace)):
target['parentName'] = src.parent.simple_name
@@ -499,7 +488,6 @@ class APIDataSource(object):
APIDataSource, 'model-cache-no-refs')
# These must be set later via the SetFooDataSourceFactory methods.
- self._ref_resolver_factory = None
self._samples_data_source_factory = None
# This caches the result of _LoadEventByName.
@@ -508,9 +496,6 @@ class APIDataSource(object):
def SetSamplesDataSourceFactory(self, samples_data_source_factory):
self._samples_data_source_factory = samples_data_source_factory
- def SetReferenceResolverFactory(self, ref_resolver_factory):
- self._ref_resolver_factory = ref_resolver_factory
-
def Create(self, request):
'''Creates an APIDataSource.
'''
@@ -547,7 +532,6 @@ class APIDataSource(object):
jsc_model = _JSCModel(
api_name,
self._api_models,
- self._ref_resolver_factory.Create() if not disable_refs else None,
disable_refs,
self._availability_finder,
self._json_cache,
diff --git a/chrome/common/extensions/docs/server2/api_data_source_test.py b/chrome/common/extensions/docs/server2/api_data_source_test.py
index 73c08b4..9d0a537 100755
--- a/chrome/common/extensions/docs/server2/api_data_source_test.py
+++ b/chrome/common/extensions/docs/server2/api_data_source_test.py
@@ -18,7 +18,6 @@ from features_bundle import FeaturesBundle
from file_system import FileNotFoundError
from future import Future
from object_store_creator import ObjectStoreCreator
-from reference_resolver import ReferenceResolver
from server_instance import ServerInstance
from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES)
from test_data.api_data_source.canned_trunk_fs import CANNED_TRUNK_FS_DATA
@@ -115,19 +114,12 @@ class APIDataSourceTest(unittest.TestCase):
with open(os.path.join(self._base_path, filename), 'r') as f:
return f.read()
- def _CreateRefResolver(self, filename):
- test_data = self._LoadJSON(filename)
- return ReferenceResolver.Factory(_FakeAPIDataSource(test_data),
- _FakeAPIModels(test_data),
- ObjectStoreCreator.ForTest()).Create()
-
def _LoadJSON(self, filename):
return json.loads(self._ReadLocalFile(filename))
def testCreateId(self):
dict_ = _JSCModel('tester',
self._api_models,
- self._CreateRefResolver('test_file_data_source.json'),
False,
_FakeAvailabilityFinder(),
self._json_cache,
@@ -146,7 +138,6 @@ class APIDataSourceTest(unittest.TestCase):
dict_ = _JSCModel('tester',
self._api_models,
False,
- self._CreateRefResolver('test_file_data_source.json'),
_FakeAvailabilityFinder(),
self._json_cache,
_FakeTemplateCache(),
@@ -159,28 +150,6 @@ class APIDataSourceTest(unittest.TestCase):
self.assertEquals('67', _FormatValue(67))
self.assertEquals('234,567', _FormatValue(234567))
- def testFormatDescription(self):
- dict_ = _JSCModel('ref_test',
- self._api_models,
- self._CreateRefResolver('ref_test_data_source.json'),
- False,
- _FakeAvailabilityFinder(),
- self._json_cache,
- _FakeTemplateCache(),
- self._features_bundle,
- None).ToDict()
- self.assertEquals(_MakeLink('ref_test#type-type2', 'type2'),
- _GetType(dict_, 'type1')['description'])
- self.assertEquals(
- 'A %s, or %s' % (_MakeLink('ref_test#type-type3', 'type3'),
- _MakeLink('ref_test#type-type2', 'type2')),
- _GetType(dict_, 'type2')['description'])
- self.assertEquals(
- '%s != %s' % (_MakeLink('other#type-type2', 'other.type2'),
- _MakeLink('ref_test#type-type2', 'type2')),
- _GetType(dict_, 'type3')['description'])
-
-
def testGetApiAvailability(self):
api_availabilities = {
'bluetooth': ChannelInfo('dev', CANNED_BRANCHES[28], 28),
@@ -193,7 +162,6 @@ class APIDataSourceTest(unittest.TestCase):
for api_name, availability in api_availabilities.iteritems():
model = _JSCModel(api_name,
self._avail_api_models,
- None,
True,
self._avail_finder,
self._avail_json_cache,
@@ -205,7 +173,6 @@ class APIDataSourceTest(unittest.TestCase):
def testGetIntroList(self):
model = _JSCModel('tester',
self._api_models,
- self._CreateRefResolver('test_file_data_source.json'),
False,
_FakeAvailabilityFinder(),
self._json_cache,
@@ -278,7 +245,6 @@ class APIDataSourceTest(unittest.TestCase):
def testAddRules(self):
dict_ = _JSCModel('add_rules_tester',
self._api_models,
- self._CreateRefResolver('test_file_data_source.json'),
False,
_FakeAvailabilityFinder(),
self._json_cache,
diff --git a/chrome/common/extensions/docs/server2/cron_servlet_test.py b/chrome/common/extensions/docs/server2/cron_servlet_test.py
index 303f548..0847c56 100755
--- a/chrome/common/extensions/docs/server2/cron_servlet_test.py
+++ b/chrome/common/extensions/docs/server2/cron_servlet_test.py
@@ -109,6 +109,12 @@ class CronServletTest(unittest.TestCase):
'static.txt': 'static.txt contents'
},
'templates': {
+ 'articles': {
+ 'activeTab.html': 'activeTab.html contents'
+ },
+ 'intros': {
+ 'browserAction.html': 'activeTab.html contents'
+ },
'private': {
'table_of_contents.html': 'table_of_contents.html contents',
},
diff --git a/chrome/common/extensions/docs/server2/document_renderer.py b/chrome/common/extensions/docs/server2/document_renderer.py
index e6c63db..e254908 100644
--- a/chrome/common/extensions/docs/server2/document_renderer.py
+++ b/chrome/common/extensions/docs/server2/document_renderer.py
@@ -30,7 +30,7 @@ class DocumentRenderer(object):
'''
START_REF = '$(ref:'
END_REF = ')'
- MAX_REF_LENGTH = 100
+ MAX_REF_LENGTH = 256
new_document = []
diff --git a/chrome/common/extensions/docs/server2/document_renderer_test.py b/chrome/common/extensions/docs/server2/document_renderer_test.py
index 757f472..0c5862f 100755
--- a/chrome/common/extensions/docs/server2/document_renderer_test.py
+++ b/chrome/common/extensions/docs/server2/document_renderer_test.py
@@ -116,14 +116,20 @@ class DocumentRendererUnittest(unittest.TestCase):
self.assertEqual(['Expected a title'], warnings)
def testInvalidRef(self):
- # There needs to be more than 100 characters between the invalid ref
- # and the next ref
- document = ('An invalid $(ref:foo.foo_t3 a title with some long '
- 'text containing a valid reference pointing to '
+ # DocumentRenderer attempts to detect unclosed $(ref:...) tags by limiting
+ # how far it looks ahead. Lorem Ipsum should be long enough to trigger that.
+ _LOREM_IPSUM = (
+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do '
+ 'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim '
+ 'ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut '
+ 'aliquip ex ea commodo consequat. Duis aute irure dolor in '
+ 'reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla '
+ 'pariatur. Excepteur sint occaecat cupidatat non proident, sunt in '
+ 'culpa qui officia deserunt mollit anim id est laborum.')
+ document = ('An invalid $(ref:foo.foo_t3 a title ' + _LOREM_IPSUM +
'$(ref:baz.baz_e1) here')
- expected_document = ('An invalid $(ref:foo.foo_t3 a title with some long '
- 'text containing a valid reference pointing to <a'
- ' href=#type-baz_e1>baz.baz_e1</a> here')
+ expected_document = ('An invalid $(ref:foo.foo_t3 a title ' + _LOREM_IPSUM +
+ '<a href=#type-baz_e1>baz.baz_e1</a> here')
path = 'some/path/to/document_api.html'
text, warnings = self._renderer.Render(document, path)
diff --git a/chrome/common/extensions/docs/server2/reference_resolver.py b/chrome/common/extensions/docs/server2/reference_resolver.py
index 0f1cb2a..32d2eea 100644
--- a/chrome/common/extensions/docs/server2/reference_resolver.py
+++ b/chrome/common/extensions/docs/server2/reference_resolver.py
@@ -60,21 +60,6 @@ class ReferenceResolver(object):
# Matches after a $ref: that doesn't have []s.
_bare_ref = re.compile('\w+(\.\w+)*')
- class Factory(object):
- def __init__(self,
- api_data_source_factory,
- api_models,
- object_store_creator):
- self._api_data_source_factory = api_data_source_factory
- self._api_models = api_models
- self._object_store_creator = object_store_creator
-
- def Create(self):
- return ReferenceResolver(
- self._api_data_source_factory.Create(None),
- self._api_models,
- self._object_store_creator.Create(ReferenceResolver))
-
def __init__(self, api_data_source, api_models, object_store):
self._api_data_source = api_data_source
self._api_models = api_models
diff --git a/chrome/common/extensions/docs/server2/samples_data_source.py b/chrome/common/extensions/docs/server2/samples_data_source.py
index 591993f..203f2c5 100644
--- a/chrome/common/extensions/docs/server2/samples_data_source.py
+++ b/chrome/common/extensions/docs/server2/samples_data_source.py
@@ -27,11 +27,11 @@ class SamplesDataSource(object):
host_file_system,
app_samples_file_system,
compiled_fs_factory,
- ref_resolver_factory,
+ ref_resolver,
base_path):
self._host_file_system = host_file_system
self._app_samples_file_system = app_samples_file_system
- self._ref_resolver = ref_resolver_factory.Create()
+ self._ref_resolver = ref_resolver
self._base_path = base_path
self._extensions_cache = compiled_fs_factory.Create(
host_file_system,
diff --git a/chrome/common/extensions/docs/server2/server_instance.py b/chrome/common/extensions/docs/server2/server_instance.py
index 7894f77..95cb56b 100644
--- a/chrome/common/extensions/docs/server2/server_instance.py
+++ b/chrome/common/extensions/docs/server2/server_instance.py
@@ -101,13 +101,10 @@ class ServerInstance(object):
self.features_bundle,
self.object_store_creator)
- self.ref_resolver_factory = ReferenceResolver.Factory(
- self.api_data_source_factory,
+ self.ref_resolver = ReferenceResolver(
+ self.api_data_source_factory.Create(None),
self.api_models,
- object_store_creator)
-
- self.api_data_source_factory.SetReferenceResolverFactory(
- self.ref_resolver_factory)
+ self.object_store_creator.Create(ReferenceResolver))
# Note: samples are super slow in the dev server because it doesn't support
# async fetch, so disable them.
@@ -124,7 +121,7 @@ class ServerInstance(object):
extension_samples_fs,
app_samples_fs,
CompiledFileSystem.Factory(object_store_creator),
- self.ref_resolver_factory,
+ self.ref_resolver,
base_path)
self.api_data_source_factory.SetSamplesDataSourceFactory(
@@ -149,7 +146,7 @@ class ServerInstance(object):
TableOfContentsRenderer(host_fs_at_trunk,
compiled_fs_factory,
self.template_renderer),
- self.ref_resolver_factory.Create())
+ self.ref_resolver)
@staticmethod
def ForTest(file_system=None, file_system_provider=None, base_path='/'):
diff --git a/chrome/common/extensions/docs/templates/private/ref_link.html b/chrome/common/extensions/docs/templates/private/ref_link.html
index 98408be..bd3817f 100644
--- a/chrome/common/extensions/docs/templates/private/ref_link.html
+++ b/chrome/common/extensions/docs/templates/private/ref_link.html
@@ -1 +1 @@
-<a href="{{link.href}}">{{link.text}}</a>
+$(ref:{{link.ref}} {{link.text}})