blob: 2c406087aabba737c4e230a559c22dcf637b80a3 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from api_categorizer import APICategorizer
from api_models import APIModels
from availability_finder import AvailabilityFinder
from empty_dir_file_system import EmptyDirFileSystem
from environment import IsDevServer
from features_bundle import FeaturesBundle
from future import All
from platform_util import GetPlatforms, PlatformToExtensionType
from reference_resolver import ReferenceResolver
from samples_model import SamplesModel
class _PlatformData(object):
def __init__(self):
self.features_bundle = None
self.api_models = None
self.reference_resolver = None
self.availability_finder = None
self.api_categorizer = None
self.samples_model = None
class PlatformBundle(object):
'''Creates various objects for different platforms
'''
def __init__(self,
branch_utility,
compiled_fs_factory,
host_fs_at_trunk,
host_file_system_iterator,
object_store_creator,
base_path):
self._branch_utility = branch_utility
self._compiled_fs_factory = compiled_fs_factory
self._host_fs_at_trunk = host_fs_at_trunk
self._host_file_system_iterator = host_file_system_iterator
self._object_store_creator = object_store_creator
self._base_path = base_path
self._platform_data = dict((p, _PlatformData()) for p in GetPlatforms())
def GetSamplesModel(self, platform):
if self._platform_data[platform].samples_model is None:
# Note: samples are super slow in the dev server because it doesn't
# support async fetch, so disable them.
if IsDevServer():
extension_samples_fs = EmptyDirFileSystem()
app_samples_fs = EmptyDirFileSystem()
else:
extension_samples_fs = self._host_fs_at_trunk
# TODO(kalman): Re-enable the apps samples, see http://crbug.com/344097.
app_samples_fs = EmptyDirFileSystem()
#app_samples_fs = github_file_system_provider.Create(
# 'GoogleChrome', 'chrome-app-samples')
self._platform_data[platform].samples_model = SamplesModel(
extension_samples_fs,
app_samples_fs,
self._compiled_fs_factory,
self.GetReferenceResolver(platform),
self._base_path,
platform)
return self._platform_data[platform].samples_model
def GetFeaturesBundle(self, platform):
if self._platform_data[platform].features_bundle is None:
self._platform_data[platform].features_bundle = FeaturesBundle(
self._host_fs_at_trunk,
self._compiled_fs_factory,
self._object_store_creator,
platform)
return self._platform_data[platform].features_bundle
def GetAPIModels(self, platform):
if self._platform_data[platform].api_models is None:
# TODO(danielj41): Filter APIModels data here rather than passing the
# platform.
self._platform_data[platform].api_models = APIModels(
self.GetFeaturesBundle(platform),
self._compiled_fs_factory,
self._host_fs_at_trunk,
self._object_store_creator,
platform)
return self._platform_data[platform].api_models
def GetReferenceResolver(self, platform):
if self._platform_data[platform].reference_resolver is None:
self._platform_data[platform].reference_resolver = ReferenceResolver(
self.GetAPIModels(platform),
self._object_store_creator.Create(ReferenceResolver,
category=platform))
return self._platform_data[platform].reference_resolver
def GetAvailabilityFinder(self, platform):
if self._platform_data[platform].availability_finder is None:
self._platform_data[platform].availability_finder = AvailabilityFinder(
self._branch_utility,
self._compiled_fs_factory,
self._host_file_system_iterator,
self._host_fs_at_trunk,
self._object_store_creator,
platform)
return self._platform_data[platform].availability_finder
def GetAPICategorizer(self, platform):
if self._platform_data[platform].api_categorizer is None:
self._platform_data[platform].api_categorizer = APICategorizer(
self._host_fs_at_trunk,
self._compiled_fs_factory,
platform)
return self._platform_data[platform].api_categorizer
def Cron(self):
return All(self.GetAPIModels(platform).Cron()
for platform in self._platform_data)
def GetIdentity(self):
return self._host_fs_at_trunk.GetIdentity()