| Index: chrome/browser/extensions/apps_promo.h
|
| diff --git a/chrome/browser/extensions/apps_promo.h b/chrome/browser/extensions/apps_promo.h
|
| index 171518095a5324817ddcc866af09f6d4c01d9887..28c5b03326a70e0eb401170f8f26c24508548567 100644
|
| --- a/chrome/browser/extensions/apps_promo.h
|
| +++ b/chrome/browser/extensions/apps_promo.h
|
| @@ -11,8 +11,10 @@
|
|
|
| #include "base/gtest_prod_util.h"
|
| #include "chrome/common/extensions/extension.h"
|
| +#include "content/common/url_fetcher.h"
|
|
|
| class PrefService;
|
| +class Profile;
|
|
|
| // This encapsulates business logic for:
|
| // - Whether to show the apps promo in the launcher
|
| @@ -32,56 +34,55 @@ class AppsPromo {
|
| USERS_EXISTING = 1 << 1,
|
| };
|
|
|
| + // Holds all the data that specifies a promo for the apps section of the NTP.
|
| + struct PromoData {
|
| + PromoData();
|
| + PromoData(const std::string& id,
|
| + const std::string& header,
|
| + const std::string& button,
|
| + const GURL& link,
|
| + const std::string& expire,
|
| + const GURL& logo,
|
| + int user_group);
|
| + ~PromoData();
|
| +
|
| + // See PromoResourceService::UnpackWebStoreSignal for descriptions of these
|
| + // fields.
|
| + std::string id;
|
| + std::string header;
|
| + std::string button;
|
| + GURL link;
|
| + std::string expire;
|
| + GURL logo;
|
| + int user_group;
|
| + };
|
| +
|
| // Register our preferences. Parts of the promo content are stored in Local
|
| // State since they're independent of the user profile.
|
| static void RegisterPrefs(PrefService* local_state);
|
| static void RegisterUserPrefs(PrefService* prefs);
|
|
|
| - // Removes the current promo data.
|
| - static void ClearPromo();
|
| -
|
| // Returns true if a promo is available for the current locale.
|
| static bool IsPromoSupportedForLocale();
|
|
|
| // Returns true if the web store is active for the existing locale.
|
| static bool IsWebStoreSupportedForLocale();
|
|
|
| - // Gets the ID of the current promo.
|
| - static std::string GetPromoId();
|
| -
|
| - // Gets the text for the promo button.
|
| - static std::string GetPromoButtonText();
|
| -
|
| - // Gets the text for the promo header.
|
| - static std::string GetPromoHeaderText();
|
| -
|
| - // Gets the promo link.
|
| - static GURL GetPromoLink();
|
| -
|
| - // Gets the URL of the promo logo image.
|
| - static GURL GetPromoLogo();
|
| -
|
| - // Gets the text for the promo "hide this" link.
|
| - static std::string GetPromoExpireText();
|
| -
|
| - // Gets the user groups for which we should maximize the promo and apps
|
| - // section. The return value is a bitwise OR of UserGroup enums.
|
| - static int GetPromoUserGroup();
|
| -
|
| - // Called to set the current promo data. The default web store logo will be
|
| - // used if |logo| is empty or not valid.
|
| - static void SetPromo(const std::string& id,
|
| - const std::string& header_text,
|
| - const std::string& button_text,
|
| - const GURL& link,
|
| - const std::string& expire_text,
|
| - const GURL& logo,
|
| - const int user_group);
|
| -
|
| // Sets whether the web store and apps section is supported for the current
|
| // locale.
|
| static void SetWebStoreSupportedForLocale(bool supported);
|
|
|
| + // Accesses the current promo data. The default logo will be used if
|
| + // |promo_data.logo| is empty or not a valid 'data' URL.
|
| + static void ClearPromo();
|
| + static PromoData GetPromo();
|
| + static void SetPromo(PromoData promo_data);
|
| +
|
| + // Gets the original URL of the logo. This should only be set when the logo
|
| + // was served over HTTPS.
|
| + static GURL GetSourcePromoLogoURL();
|
| + static void SetSourcePromoLogoURL(GURL original_url);
|
| +
|
| explicit AppsPromo(PrefService* prefs);
|
| ~AppsPromo();
|
|
|
| @@ -145,4 +146,33 @@ class AppsPromo {
|
| DISALLOW_COPY_AND_ASSIGN(AppsPromo);
|
| };
|
|
|
| +// Fetches logos over HTTPS, making sure we don't send cookies and that we
|
| +// cache the image until its source URL changes.
|
| +class AppsPromoLogoFetcher : public URLFetcher::Delegate {
|
| + public:
|
| + AppsPromoLogoFetcher(Profile* profile,
|
| + AppsPromo::PromoData promo_data);
|
| + virtual ~AppsPromoLogoFetcher();
|
| +
|
| + virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
|
| +
|
| + private:
|
| + // Fetches the logo and stores the result as a data URL.
|
| + void FetchLogo();
|
| +
|
| + // Checks if the logo was downloaded previously.
|
| + bool HaveCachedLogo();
|
| +
|
| + // Sets the apps promo based on the current data and then issues the
|
| + // WEB_STORE_PROMO_LOADED notification so open NTPs can inject the promo.
|
| + void SavePromo();
|
| +
|
| + // Checks if the promo logo matches https://*.google.com/*.png.
|
| + bool SupportsLogoURL();
|
| +
|
| + Profile* profile_;
|
| + AppsPromo::PromoData promo_data_;
|
| + scoped_ptr<URLFetcher> url_fetcher_;
|
| +};
|
| +
|
| #endif // CHROME_BROWSER_EXTENSIONS_APPS_PROMO_H_
|
|
|