customization_document.h revision effb81e5f8246d0db0270817048dc992db66e9fb
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_CUSTOMIZATION_DOCUMENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_CUSTOMIZATION_DOCUMENT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/singleton.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/weak_ptr.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple; 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Profile; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace extensions { 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ExternalLoader; 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLFetcher; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace user_prefs { 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class PrefRegistrySyncable; 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This test is in global namespace so it must be declared here. 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void Test__InitStartupCustomizationDocument(const std::string& manifest); 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ServicesCustomizationExternalLoader; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace system { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatisticsProvider; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // system 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for OEM customization document classes. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CustomizationDocument { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~CustomizationDocument(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return true if the document was successfully fetched and parsed. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsReady() const { return root_.get(); } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit CustomizationDocument(const std::string& accepted_version); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool LoadManifestFromFile(const base::FilePath& manifest_path); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool LoadManifestFromString(const std::string& manifest); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetLocaleSpecificString(const std::string& locale, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& dictionary_name, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& entry_name) const; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::DictionaryValue> root_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Value of the "version" attribute that is supported. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Otherwise config is not loaded. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string accepted_version_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CustomizationDocument); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OEM startup customization document class. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Now StartupCustomizationDocument is loaded in c-tor so just after create it 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// may be ready or not (if manifest is missing or corrupted) and this state 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// won't be changed later (i.e. IsReady() always return the same value). 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StartupCustomizationDocument : public CustomizationDocument { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static StartupCustomizationDocument* GetInstance(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetEULAPage(const std::string& locale) const; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These methods can be called even if !IsReady(), in this case VPD values 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will be returned. 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Raw value of "initial_locale" like initial_locale="en-US,sv,da,fi,no" . 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& initial_locale() const { return initial_locale_; } 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Vector of individual locale values. 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::vector<std::string>& configured_locales() const; 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Default locale value (first value in initial_locale list). 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& initial_locale_default() const; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& initial_timezone() const { return initial_timezone_; } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& keyboard_layout() const { return keyboard_layout_; } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StartupCustomizationDocumentTest, Basic); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StartupCustomizationDocumentTest, VPD); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(StartupCustomizationDocumentTest, BadManifest); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(ServicesCustomizationDocumentTest, MultiLanguage); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend class OobeLocalizationTest; 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) friend void ::Test__InitStartupCustomizationDocument( 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& manifest); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct DefaultSingletonTraits<StartupCustomizationDocument>; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // C-tor for singleton construction. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupCustomizationDocument(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // C-tor for test construction. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartupCustomizationDocument(system::StatisticsProvider* provider, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& manifest); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~StartupCustomizationDocument(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(system::StatisticsProvider* provider); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |attr| exists in machine stat, assign it to |value|. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitFromMachineStatistic(const char* attr, std::string* value); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string initial_locale_; 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<std::string> configured_locales_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string initial_timezone_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string keyboard_layout_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(StartupCustomizationDocument); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OEM services customization document class. 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// ServicesCustomizationDocument is fetched from network therefore it is not 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// ready just after creation. Fetching of the manifest should be initiated 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// outside this class by calling StartFetching() method. 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// User of the file should check IsReady before use it. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServicesCustomizationDocument : public CustomizationDocument, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private net::URLFetcherDelegate { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ServicesCustomizationDocument* GetInstance(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Registers preferences. 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void RegisterPrefs(PrefRegistrySimple* registry); 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static const char kManifestUrl[]; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return true if the customization was applied. Customization is applied only 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // once per machine. 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static bool WasOOBECustomizationApplied(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start fetching customization document. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartFetching(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Apply customization and save in machine options that customization was 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // applied successfully. Return true if customization was applied. 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool ApplyOOBECustomization(); 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns default wallpaper URL. 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GURL GetDefaultWallpaperUrl() const; 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns list of default apps. 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool GetDefaultApps(std::vector<std::string>* ids) const; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Creates an extensions::ExternalLoader that will provide OEM default apps. 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Cache of OEM default apps stored in profile preferences. 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions::ExternalLoader* CreateExternalLoader(Profile* profile); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns the name of the folder for OEM apps for given |locale|. 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string GetOemAppsFolderName(const std::string& locale) const; 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 175effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Initialize instance of ServicesCustomizationDocument for tests that will 176effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // override singleton until ShutdownForTesting is called. 177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static void InitializeForTesting(); 178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Remove instance of ServicesCustomizationDocument for tests. 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static void ShutdownForTesting(); 181effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct DefaultSingletonTraits<ServicesCustomizationDocument>; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef std::vector<base::WeakPtr<ServicesCustomizationExternalLoader> > 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExternalLoaders; 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // C-tor for singleton construction. 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ServicesCustomizationDocument(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // C-tor for test construction. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ServicesCustomizationDocument(const std::string& manifest); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ServicesCustomizationDocument(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save applied state in machine settings. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetApplied(bool val); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Overriden from CustomizationDocument: 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool LoadManifestFromString(const std::string& manifest) OVERRIDE; 201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overriden from net::URLFetcherDelegate: 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Initiate file fetching. Wait for online status. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartFileFetch(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Initiate file fetching. Don't wait for online status. 209effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void DoStartFileFetch(); 210effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Executes on FILE thread and reads file to string. 212effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch static void ReadFileInBackground( 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::WeakPtr<ServicesCustomizationDocument> self, 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const base::FilePath& file); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Called on UI thread with results of ReadFileInBackground. 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnManifesteRead(const std::string& manifest); 218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Method called when manifest was successfully loaded. 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnManifestLoaded(); 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns list of default apps in ExternalProvider format. 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static scoped_ptr<base::DictionaryValue> GetDefaultAppsInProviderFormat( 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::DictionaryValue& root); 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Update cached manifest for |profile|. 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void UpdateCachedManifest(Profile* profile); 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Customization document not found for give ID. 230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnCustomizationNotFound(); 231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 232effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Set OEM apps folder name for AppListSyncableService for |profile|. 233effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void SetOemFolderName(Profile* profile, const base::DictionaryValue& root); 234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns the name of the folder for OEM apps for given |locale|. 236effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string GetOemAppsFolderNameImpl( 237effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& locale, 238effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const base::DictionaryValue& root) const; 239effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Services customization manifest URL. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLFetcher instance. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::URLFetcher> url_fetcher_; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // How many times we already tried to fetch customization manifest file. 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_retries_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Manifest fetch is already in progress. 250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool fetch_started_; 251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Delay between checks for network online state. 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::TimeDelta network_delay_; 254effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 255a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Known external loaders. 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExternalLoaders external_loaders_; 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 258effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Weak factory for callbacks. 259effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::WeakPtrFactory<ServicesCustomizationDocument> weak_ptr_factory_; 260effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ServicesCustomizationDocument); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_CUSTOMIZATION_DOCUMENT_H_ 267