| Index: chrome/browser/chromeos/customization_document.h
|
| diff --git a/chrome/browser/chromeos/customization_document.h b/chrome/browser/chromeos/customization_document.h
|
| index 91970c604b24a23f9f04603bf832b26550eaeb9c..66d711aff8d49b0a6463ad865559d686e1f44dd8 100644
|
| --- a/chrome/browser/chromeos/customization_document.h
|
| +++ b/chrome/browser/chromeos/customization_document.h
|
| @@ -8,12 +8,18 @@
|
|
|
| #include <string>
|
|
|
| -#include "base/file_path.h"
|
| +#include "base/gtest_prod_util.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/singleton.h"
|
| +#include "base/timer.h"
|
| #include "base/values.h"
|
| +#include "chrome/common/net/url_fetcher.h"
|
| +#include "googleurl/src/gurl.h"
|
|
|
| class DictionaryValue;
|
| +class FilePath;
|
| class ListValue;
|
| +class PrefService;
|
|
|
| namespace chromeos {
|
|
|
| @@ -22,13 +28,17 @@ class SystemAccess;
|
| // Base class for OEM customization document classes.
|
| class CustomizationDocument {
|
| public:
|
| - CustomizationDocument() {}
|
| virtual ~CustomizationDocument() {}
|
|
|
| + // Return true if the document was successfully fetched and parsed.
|
| + bool IsReady() const { return root_.get(); }
|
| +
|
| + protected:
|
| + CustomizationDocument() {}
|
| +
|
| virtual bool LoadManifestFromFile(const FilePath& manifest_path);
|
| virtual bool LoadManifestFromString(const std::string& manifest);
|
|
|
| - protected:
|
| std::string GetLocaleSpecificString(const std::string& locale,
|
| const std::string& dictionary_name,
|
| const std::string& entry_name) const;
|
| @@ -40,11 +50,12 @@ class CustomizationDocument {
|
| };
|
|
|
| // OEM startup customization document class.
|
| +// Now StartupCustomizationDocument is loaded in c-tor so just after create it
|
| +// may be ready or not (if manifest is missing or corrupted) and this state
|
| +// won't be changed later (i.e. IsReady() always return the same value).
|
| class StartupCustomizationDocument : public CustomizationDocument {
|
| public:
|
| - explicit StartupCustomizationDocument(SystemAccess* system_access);
|
| -
|
| - virtual bool LoadManifestFromString(const std::string& manifest);
|
| + static StartupCustomizationDocument* GetInstance();
|
|
|
| const std::string& initial_locale() const { return initial_locale_; }
|
| const std::string& initial_timezone() const { return initial_timezone_; }
|
| @@ -55,11 +66,23 @@ class StartupCustomizationDocument : public CustomizationDocument {
|
| std::string GetEULAPage(const std::string& locale) const;
|
|
|
| private:
|
| + FRIEND_TEST(StartupCustomizationDocumentTest, Basic);
|
| + FRIEND_TEST(StartupCustomizationDocumentTest, VPD);
|
| + FRIEND_TEST(StartupCustomizationDocumentTest, BadManifest);
|
| + friend struct DefaultSingletonTraits<StartupCustomizationDocument>;
|
| +
|
| + // C-tor for singleton construction.
|
| + StartupCustomizationDocument();
|
| +
|
| + // C-tor for test construction.
|
| + StartupCustomizationDocument(SystemAccess* system_access,
|
| + const std::string& manifest);
|
| +
|
| + void Init(SystemAccess* system_access);
|
| +
|
| // If |attr| exists in machine stat, assign it to |value|.
|
| void InitFromMachineStatistic(const char* attr, std::string* value);
|
|
|
| - SystemAccess* system_access_;
|
| -
|
| std::string initial_locale_;
|
| std::string initial_timezone_;
|
| std::string keyboard_layout_;
|
| @@ -69,14 +92,72 @@ class StartupCustomizationDocument : public CustomizationDocument {
|
| };
|
|
|
| // OEM services customization document class.
|
| -class ServicesCustomizationDocument : public CustomizationDocument {
|
| +// ServicesCustomizationDocument is fetched from network or local file but on
|
| +// FILE thread therefore it may not be ready just after creation. Fetching of
|
| +// the manifest should be initiated outside this class by calling
|
| +// StartFetching() method. User of the file should check IsReady before use it.
|
| +class ServicesCustomizationDocument : public CustomizationDocument,
|
| + private URLFetcher::Delegate {
|
| public:
|
| - ServicesCustomizationDocument() {}
|
| + static ServicesCustomizationDocument* GetInstance();
|
| +
|
| + // Registers preferences.
|
| + static void RegisterPrefs(PrefService* local_state);
|
| +
|
| + // Return true if the customization was applied. Customization is applied only
|
| + // once per machine.
|
| + static bool WasApplied();
|
| +
|
| + // Start fetching customization document.
|
| + void StartFetching();
|
| +
|
| + // Apply customization and save in machine options that customization was
|
| + // applied successfully. Return true if customization was applied.
|
| + bool ApplyCustomization();
|
|
|
| std::string GetInitialStartPage(const std::string& locale) const;
|
| std::string GetSupportPage(const std::string& locale) const;
|
|
|
| private:
|
| + FRIEND_TEST(ServicesCustomizationDocumentTest, Basic);
|
| + FRIEND_TEST(ServicesCustomizationDocumentTest, BadManifest);
|
| + friend struct DefaultSingletonTraits<ServicesCustomizationDocument>;
|
| +
|
| + // C-tor for singleton construction.
|
| + ServicesCustomizationDocument();
|
| +
|
| + // C-tor for test construction.
|
| + explicit ServicesCustomizationDocument(const std::string& manifest);
|
| +
|
| + // Save applied state in machine settings.
|
| + static void SetApplied(bool val);
|
| +
|
| + // Overriden from URLFetcher::Delegate:
|
| + virtual void OnURLFetchComplete(const URLFetcher* source,
|
| + const GURL& url,
|
| + const net::URLRequestStatus& status,
|
| + int response_code,
|
| + const ResponseCookies& cookies,
|
| + const std::string& data);
|
| +
|
| + // Initiate file fetching.
|
| + void StartFileFetch();
|
| +
|
| + // Executes on FILE thread and reads file to string.
|
| + void ReadFileInBackground(const FilePath& file);
|
| +
|
| + // Services customization manifest URL.
|
| + GURL url_;
|
| +
|
| + // URLFetcher instance.
|
| + scoped_ptr<URLFetcher> url_fetcher_;
|
| +
|
| + // Timer to retry fetching file if network is not available.
|
| + base::OneShotTimer<ServicesCustomizationDocument> retry_timer_;
|
| +
|
| + // How many times we already tried to fetch customization manifest file.
|
| + int num_retries_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ServicesCustomizationDocument);
|
| };
|
|
|
|
|