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..590d9f7f8af21000e92eea95c8d5fd5d8332cdcb 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,53 @@ 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(); |
+ |
+ std::string id; |
+ std::string header; |
+ std::string button; |
+ GURL link; |
+ std::string expire; |
Mihai Parparita -not on Chrome
2011/08/31 23:26:23
A comment pointing to PromoResourceService::Unpack
jstritar
2011/09/01 16:10:13
Done.
|
+ 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 |
Mihai Parparita -not on Chrome
2011/08/31 23:26:23
"Source URL" might be a better name than "original
jstritar
2011/09/01 16:10:13
Done.
|
+ // was served over https. |
Mihai Parparita -not on Chrome
2011/08/31 23:26:23
Nit: capitalize HTTPS (applies to other parts of t
jstritar
2011/09/01 16:10:13
Done.
|
+ static GURL GetPromoLogoOriginal(); |
Mihai Parparita -not on Chrome
2011/08/31 23:26:23
Get/SetOriginalPromoLogoUrl reads a bit better.
jstritar
2011/09/01 16:10:13
Done. Updated to Get/SetSourcePromoLogoURL.
|
+ static void SetPromoLogoOriginal(GURL original_url); |
+ |
explicit AppsPromo(PrefService* prefs); |
~AppsPromo(); |
@@ -145,4 +144,30 @@ class AppsPromo { |
DISALLOW_COPY_AND_ASSIGN(AppsPromo); |
}; |
+// Fetches logos over https, making sure we don't send cookies and that we |
+// cache the image as long as possible. |
Mihai Parparita -not on Chrome
2011/08/31 23:26:23
Not seeing anything that would make us "cache the
jstritar
2011/09/01 16:10:13
Hehe, yeah I guess that isn't quite accurate. I up
|
+class AppsPromoLogoDownloader : public URLFetcher::Delegate { |
+ public: |
+ AppsPromoLogoDownloader(Profile* profile, |
+ AppsPromo::PromoData promo_data); |
+ ~AppsPromoLogoDownloader(); |
+ |
+ virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; |
+ |
+ private: |
+ // Fetches the logo and stores the result as a data URL. |
+ void FetchLogo(); |
+ |
+ // 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(); |
+ |
+ // Returns true if the logo needs to be downloaded. |
+ bool ShouldFetchLogo(); |
+ |
+ Profile* profile_; |
+ AppsPromo::PromoData promo_data_; |
+ scoped_ptr<URLFetcher> url_fetcher_; |
+}; |
+ |
#endif // CHROME_BROWSER_EXTENSIONS_APPS_PROMO_H_ |