# 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()