Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: chrome/browser/chromeos/customization_document.h

Issue 236013002: Apply default wallpaper from customization manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove wallpaper URL from ServicesCustomizationDocumentTest. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/customization_document.h
diff --git a/chrome/browser/chromeos/customization_document.h b/chrome/browser/chromeos/customization_document.h
index 1c0ea8fcea6290bae9a6409e71e68219474bb138..97e166d82e193595447546e15faebff133f52f7b 100644
--- a/chrome/browser/chromeos/customization_document.h
+++ b/chrome/browser/chromeos/customization_document.h
@@ -42,6 +42,7 @@ void Test__InitStartupCustomizationDocument(const std::string& manifest);
namespace chromeos {
+class CustomizationWallpaperDownloader;
class ServicesCustomizationExternalLoader;
namespace system {
@@ -135,7 +136,8 @@ class StartupCustomizationDocument : public CustomizationDocument {
// OEM services customization document class.
// ServicesCustomizationDocument is fetched from network therefore it is not
// ready just after creation. Fetching of the manifest should be initiated
-// outside this class by calling StartFetching() method.
+// outside this class by calling StartFetching() or EnsureCustomizationApplied()
+// methods.
// User of the file should check IsReady before use it.
class ServicesCustomizationDocument : public CustomizationDocument,
private net::URLFetcherDelegate {
@@ -152,6 +154,12 @@ class ServicesCustomizationDocument : public CustomizationDocument,
// once per machine.
static bool WasOOBECustomizationApplied();
+ // If customization has not been applied, start fetching and applying.
+ void EnsureCustomizationApplied();
+
+ // Returns Closure with the EnsureCustomizationApplied() method.
+ base::Closure EnsureCustomizationAppliedClosure();
+
// Start fetching customization document.
void StartFetching();
@@ -159,8 +167,9 @@ class ServicesCustomizationDocument : public CustomizationDocument,
// applied successfully. Return true if customization was applied.
bool ApplyOOBECustomization();
- // Returns default wallpaper URL.
- GURL GetDefaultWallpaperUrl() const;
+ // Returns true if default wallpaper URL attribute found in manifest.
+ // |out_url| is set to attribute value.
+ bool GetDefaultWallpaperUrl(GURL* out_url) const;
// Returns list of default apps.
bool GetDefaultApps(std::vector<std::string>* ids) const;
@@ -179,12 +188,21 @@ class ServicesCustomizationDocument : public CustomizationDocument,
// Remove instance of ServicesCustomizationDocument for tests.
static void ShutdownForTesting();
+ // These methods are also called by WallpaperManager to get "global default"
+ // customized wallpaper path (and to init default wallpaper path from it)
+ // before first wallpaper is shown.
+ static base::FilePath GetCustomizedWallpaperCacheDir();
+ static base::FilePath GetCustomizedWallpaperDownloadedFileName();
+
private:
friend struct DefaultSingletonTraits<ServicesCustomizationDocument>;
typedef std::vector<base::WeakPtr<ServicesCustomizationExternalLoader> >
ExternalLoaders;
+ // Guard for a single application task (wallpaper downloading, for example).
+ class ApplyingTask;
+
// C-tor for singleton construction.
ServicesCustomizationDocument();
@@ -237,6 +255,36 @@ class ServicesCustomizationDocument : public CustomizationDocument,
const std::string& locale,
const base::DictionaryValue& root) const;
+ // Start download of wallpaper image if needed.
+ void StartOEMWallpaperDownload(const GURL& wallpaper_url,
+ scoped_ptr<ApplyingTask> applying);
+
+ // Check that current customized wallpaper cache exists. Once wallpaper is
+ // downloaded, it's never updated (even if manifest is re-fetched).
+ // Start wallpaper download if needed.
+ void CheckAndApplyWallpaper();
+
+ // Intermediate function to pass the result of PathExists to ApplyWallpaper.
+ void OnCheckedWallpaperCacheExists(scoped_ptr<bool> exists,
+ scoped_ptr<ApplyingTask> applying);
+
+ // Called after downloaded wallpaper has been checked.
+ void ApplyWallpaper(bool default_wallpaper_file_exists,
+ scoped_ptr<ApplyingTask> applying);
+
+ // Set Shell default wallpaper to customized.
+ // It's wrapped as a callback and passed as a parameter to
+ // CustomizationWallpaperDownloader.
+ void OnOEMWallpaperDownloaded(scoped_ptr<ApplyingTask> applying,
+ bool success,
+ const GURL& wallpaper_url);
+
+ // Register one of Customization applying tasks.
+ void ApplyingTaskStarted();
+
+ // Mark task finished and check for "all customization applied".
+ void ApplyingTaskFinished(bool success);
+
// Services customization manifest URL.
GURL url_;
@@ -255,6 +303,19 @@ class ServicesCustomizationDocument : public CustomizationDocument,
// Known external loaders.
ExternalLoaders external_loaders_;
+ scoped_ptr<CustomizationWallpaperDownloader> wallpaper_downloader_;
+
+ // This is barrier until customization is applied.
+ // When number of finished tasks match number of started - customization is
+ // applied.
+ size_t apply_tasks_started_;
+ size_t apply_tasks_finished_;
+
+ // This is the number of successfully finished customization tasks.
+ // If it matches number of tasks finished - customization is applied
+ // successfully.
+ size_t apply_tasks_success_;
+
// Weak factory for callbacks.
base::WeakPtrFactory<ServicesCustomizationDocument> weak_ptr_factory_;

Powered by Google App Engine
This is Rietveld 408576698