| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/banners/app_banner_manager.h" | 5 #include "chrome/browser/banners/app_banner_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 int gCurrentRequestID = -1; | 32 int gCurrentRequestID = -1; |
| 33 int gTimeDeltaInDaysForTesting = 0; | 33 int gTimeDeltaInDaysForTesting = 0; |
| 34 | 34 |
| 35 InstallableParams ParamsToGetManifest() { | 35 InstallableParams ParamsToGetManifest() { |
| 36 return InstallableParams(); | 36 return InstallableParams(); |
| 37 } | 37 } |
| 38 | 38 |
| 39 // Returns an InstallableParams object that requests all checks necessary for | |
| 40 // a web app banner. | |
| 41 InstallableParams ParamsToPerformInstallableCheck(int ideal_icon_size_in_px, | |
| 42 int minimum_icon_size_in_px) { | |
| 43 InstallableParams params; | |
| 44 params.ideal_primary_icon_size_in_px = ideal_icon_size_in_px; | |
| 45 params.minimum_primary_icon_size_in_px = minimum_icon_size_in_px; | |
| 46 params.check_installable = true; | |
| 47 params.fetch_valid_primary_icon = true; | |
| 48 | |
| 49 return params; | |
| 50 } | |
| 51 | |
| 52 } // anonymous namespace | 39 } // anonymous namespace |
| 53 | 40 |
| 54 namespace banners { | 41 namespace banners { |
| 55 | 42 |
| 56 // static | 43 // static |
| 57 base::Time AppBannerManager::GetCurrentTime() { | 44 base::Time AppBannerManager::GetCurrentTime() { |
| 58 return base::Time::Now() + | 45 return base::Time::Now() + |
| 59 base::TimeDelta::FromDays(gTimeDeltaInDaysForTesting); | 46 base::TimeDelta::FromDays(gTimeDeltaInDaysForTesting); |
| 60 } | 47 } |
| 61 | 48 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 } | 177 } |
| 191 | 178 |
| 192 std::string AppBannerManager::GetStatusParam(InstallableStatusCode code) { | 179 std::string AppBannerManager::GetStatusParam(InstallableStatusCode code) { |
| 193 if (code == NO_ACCEPTABLE_ICON || code == MANIFEST_MISSING_SUITABLE_ICON) { | 180 if (code == NO_ACCEPTABLE_ICON || code == MANIFEST_MISSING_SUITABLE_ICON) { |
| 194 return base::IntToString(InstallableManager::GetMinimumIconSizeInPx()); | 181 return base::IntToString(InstallableManager::GetMinimumIconSizeInPx()); |
| 195 } | 182 } |
| 196 | 183 |
| 197 return std::string(); | 184 return std::string(); |
| 198 } | 185 } |
| 199 | 186 |
| 200 int AppBannerManager::GetIdealIconSizeInPx() { | 187 int AppBannerManager::GetIdealPrimaryIconSizeInPx() { |
| 201 return InstallableManager::GetMinimumIconSizeInPx(); | 188 return InstallableManager::GetMinimumIconSizeInPx(); |
| 202 } | 189 } |
| 203 | 190 |
| 204 int AppBannerManager::GetMinimumIconSizeInPx() { | 191 int AppBannerManager::GetMinimumPrimaryIconSizeInPx() { |
| 205 return InstallableManager::GetMinimumIconSizeInPx(); | 192 return InstallableManager::GetMinimumIconSizeInPx(); |
| 206 } | 193 } |
| 207 | 194 |
| 208 base::WeakPtr<AppBannerManager> AppBannerManager::GetWeakPtr() { | 195 base::WeakPtr<AppBannerManager> AppBannerManager::GetWeakPtr() { |
| 209 return weak_factory_.GetWeakPtr(); | 196 return weak_factory_.GetWeakPtr(); |
| 210 } | 197 } |
| 211 | 198 |
| 212 bool AppBannerManager::IsDebugMode() const { | 199 bool AppBannerManager::IsDebugMode() const { |
| 213 return is_debug_mode_ || | 200 return is_debug_mode_ || |
| 214 base::CommandLine::ForCurrentProcess()->HasSwitch( | 201 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 235 DCHECK(!data.manifest.IsEmpty()); | 222 DCHECK(!data.manifest.IsEmpty()); |
| 236 | 223 |
| 237 manifest_url_ = data.manifest_url; | 224 manifest_url_ = data.manifest_url; |
| 238 manifest_ = data.manifest; | 225 manifest_ = data.manifest; |
| 239 app_title_ = (manifest_.name.is_null()) ? manifest_.short_name.string() | 226 app_title_ = (manifest_.name.is_null()) ? manifest_.short_name.string() |
| 240 : manifest_.name.string(); | 227 : manifest_.name.string(); |
| 241 | 228 |
| 242 PerformInstallableCheck(); | 229 PerformInstallableCheck(); |
| 243 } | 230 } |
| 244 | 231 |
| 232 InstallableParams AppBannerManager::ParamsToPerformInstallableCheck() { |
| 233 InstallableParams params; |
| 234 params.ideal_primary_icon_size_in_px = GetIdealPrimaryIconSizeInPx(); |
| 235 params.minimum_primary_icon_size_in_px = GetMinimumPrimaryIconSizeInPx(); |
| 236 params.check_installable = true; |
| 237 params.fetch_valid_primary_icon = true; |
| 238 |
| 239 return params; |
| 240 } |
| 241 |
| 245 void AppBannerManager::PerformInstallableCheck() { | 242 void AppBannerManager::PerformInstallableCheck() { |
| 246 if (!CheckIfShouldShowBanner()) | 243 if (!CheckIfShouldShowBanner()) |
| 247 return; | 244 return; |
| 248 | 245 |
| 249 // Fetch and verify the other required information. | 246 // Fetch and verify the other required information. |
| 250 manager_->GetData(ParamsToPerformInstallableCheck(GetIdealIconSizeInPx(), | 247 manager_->GetData(ParamsToPerformInstallableCheck(), |
| 251 GetMinimumIconSizeInPx()), | |
| 252 base::Bind(&AppBannerManager::OnDidPerformInstallableCheck, | 248 base::Bind(&AppBannerManager::OnDidPerformInstallableCheck, |
| 253 GetWeakPtr())); | 249 GetWeakPtr())); |
| 254 } | 250 } |
| 255 | 251 |
| 256 void AppBannerManager::OnDidPerformInstallableCheck( | 252 void AppBannerManager::OnDidPerformInstallableCheck( |
| 257 const InstallableData& data) { | 253 const InstallableData& data) { |
| 258 if (data.is_installable) | 254 if (data.is_installable) |
| 259 TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_REQUESTED); | 255 TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_REQUESTED); |
| 260 | 256 |
| 261 if (data.error_code != NO_ERROR_DETECTED) { | 257 if (data.error_code != NO_ERROR_DETECTED) { |
| 262 if (data.error_code == NO_MATCHING_SERVICE_WORKER) | 258 if (data.error_code == NO_MATCHING_SERVICE_WORKER) |
| 263 TrackDisplayEvent(DISPLAY_EVENT_LACKS_SERVICE_WORKER); | 259 TrackDisplayEvent(DISPLAY_EVENT_LACKS_SERVICE_WORKER); |
| 264 | 260 |
| 265 ReportStatus(web_contents(), data.error_code); | 261 ReportStatus(web_contents(), data.error_code); |
| 266 Stop(); | 262 Stop(); |
| 267 } | 263 } |
| 268 | 264 |
| 269 if (!is_active_) | 265 if (!is_active_) |
| 270 return; | 266 return; |
| 271 | 267 |
| 272 DCHECK(data.is_installable); | 268 DCHECK(data.is_installable); |
| 273 DCHECK(!data.primary_icon_url.is_empty()); | 269 DCHECK(!data.primary_icon_url.is_empty()); |
| 274 DCHECK(data.primary_icon); | 270 DCHECK(data.primary_icon); |
| 275 | 271 |
| 276 icon_url_ = data.primary_icon_url; | 272 primary_icon_url_ = data.primary_icon_url; |
| 277 icon_.reset(new SkBitmap(*data.primary_icon)); | 273 primary_icon_.reset(new SkBitmap(*data.primary_icon)); |
| 278 | 274 |
| 279 SendBannerPromptRequest(); | 275 SendBannerPromptRequest(); |
| 280 } | 276 } |
| 281 | 277 |
| 282 void AppBannerManager::RecordDidShowBanner(const std::string& event_name) { | 278 void AppBannerManager::RecordDidShowBanner(const std::string& event_name) { |
| 283 content::WebContents* contents = web_contents(); | 279 content::WebContents* contents = web_contents(); |
| 284 DCHECK(contents); | 280 DCHECK(contents); |
| 285 | 281 |
| 286 AppBannerSettingsHelper::RecordBannerEvent( | 282 AppBannerSettingsHelper::RecordBannerEvent( |
| 287 contents, validated_url_, GetAppIdentifier(), | 283 contents, validated_url_, GetAppIdentifier(), |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 517 was_canceled_by_page_ = false; | 513 was_canceled_by_page_ = false; |
| 518 } else { | 514 } else { |
| 519 TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_NO_ACTION); | 515 TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_NO_ACTION); |
| 520 } | 516 } |
| 521 | 517 |
| 522 AppBannerSettingsHelper::RecordMinutesFromFirstVisitToShow( | 518 AppBannerSettingsHelper::RecordMinutesFromFirstVisitToShow( |
| 523 contents, validated_url_, GetAppIdentifier(), GetCurrentTime()); | 519 contents, validated_url_, GetAppIdentifier(), GetCurrentTime()); |
| 524 | 520 |
| 525 DCHECK(!manifest_url_.is_empty()); | 521 DCHECK(!manifest_url_.is_empty()); |
| 526 DCHECK(!manifest_.IsEmpty()); | 522 DCHECK(!manifest_.IsEmpty()); |
| 527 DCHECK(!icon_url_.is_empty()); | 523 DCHECK(!primary_icon_url_.is_empty()); |
| 528 DCHECK(icon_.get()); | 524 DCHECK(primary_icon_.get()); |
| 529 | 525 |
| 530 TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_COMPLETE); | 526 TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_COMPLETE); |
| 531 ShowBanner(); | 527 ShowBanner(); |
| 532 is_active_ = false; | 528 is_active_ = false; |
| 533 } | 529 } |
| 534 | 530 |
| 535 void AppBannerManager::DisplayAppBanner() { | 531 void AppBannerManager::DisplayAppBanner() { |
| 536 if (was_canceled_by_page_) { | 532 if (was_canceled_by_page_) { |
| 537 // Simulate a non-canceled OnBannerPromptReply to show the delayed banner. | 533 // Simulate a non-canceled OnBannerPromptReply to show the delayed banner. |
| 538 // Don't reset |was_canceled_by_page_| yet for metrics purposes. | 534 // Don't reset |was_canceled_by_page_| yet for metrics purposes. |
| 539 OnBannerPromptReply(blink::mojom::AppBannerPromptReply::NONE, referrer_); | 535 OnBannerPromptReply(blink::mojom::AppBannerPromptReply::NONE, referrer_); |
| 540 } else { | 536 } else { |
| 541 // Log that the prompt request was made for when we get the prompt reply. | 537 // Log that the prompt request was made for when we get the prompt reply. |
| 542 page_requested_prompt_ = true; | 538 page_requested_prompt_ = true; |
| 543 } | 539 } |
| 544 } | 540 } |
| 545 | 541 |
| 546 } // namespace banners | 542 } // namespace banners |
| OLD | NEW |