| Index: chrome/browser/banners/app_banner_manager_desktop.cc
|
| diff --git a/chrome/browser/banners/app_banner_manager_desktop.cc b/chrome/browser/banners/app_banner_manager_desktop.cc
|
| index 01b8e80f782a802aa980690021a3c433f529c99c..bab306a008fff7ea2c58aaaa8f24208b802e2206 100644
|
| --- a/chrome/browser/banners/app_banner_manager_desktop.cc
|
| +++ b/chrome/browser/banners/app_banner_manager_desktop.cc
|
| @@ -5,17 +5,19 @@
|
| #include "chrome/browser/banners/app_banner_manager_desktop.h"
|
|
|
| #include "base/command_line.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| #include "build/build_config.h"
|
| -#include "chrome/browser/banners/app_banner_data_fetcher_desktop.h"
|
| +#include "chrome/browser/banners/app_banner_infobar_delegate_desktop.h"
|
| +#include "chrome/browser/banners/app_banner_metrics.h"
|
| +#include "chrome/browser/banners/app_banner_settings_helper.h"
|
| +#include "chrome/browser/extensions/bookmark_app_helper.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| #include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/render_messages.h"
|
| +#include "chrome/common/web_application_info.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| #include "extensions/common/constants.h"
|
|
|
| -namespace {
|
| -// TODO(dominickn) Identify the best minimum icon size to guarantee the best
|
| -// user experience.
|
| -int kMinimumIconSize = extension_misc::EXTENSION_ICON_LARGE;
|
| -} // anonymous namespace
|
| -
|
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(banners::AppBannerManagerDesktop);
|
|
|
| namespace banners {
|
| @@ -30,17 +32,87 @@ bool AppBannerManagerDesktop::IsEnabled() {
|
| #endif
|
| }
|
|
|
| -AppBannerDataFetcher* AppBannerManagerDesktop::CreateAppBannerDataFetcher(
|
| - base::WeakPtr<AppBannerDataFetcher::Delegate> weak_delegate,
|
| - bool is_debug_mode) {
|
| - return new AppBannerDataFetcherDesktop(web_contents(), weak_delegate,
|
| - kMinimumIconSize, kMinimumIconSize,
|
| - is_debug_mode);
|
| -}
|
| -
|
| AppBannerManagerDesktop::AppBannerManagerDesktop(
|
| content::WebContents* web_contents)
|
| - : AppBannerManager(web_contents) {
|
| + : AppBannerManager(web_contents) { }
|
| +
|
| +AppBannerManagerDesktop::~AppBannerManagerDesktop() { }
|
| +
|
| +void AppBannerManagerDesktop::DidFinishCreatingBookmarkApp(
|
| + const extensions::Extension* extension,
|
| + const WebApplicationInfo& web_app_info) {
|
| + content::WebContents* contents = web_contents();
|
| + if (contents) {
|
| + // A null extension pointer indicates that the bookmark app install was
|
| + // not successful.
|
| + if (extension == nullptr) {
|
| + contents->GetMainFrame()->Send(new ChromeViewMsg_AppBannerDismissed(
|
| + contents->GetMainFrame()->GetRoutingID(), event_request_id()));
|
| +
|
| + AppBannerSettingsHelper::RecordBannerDismissEvent(
|
| + contents, GetAppIdentifier(), AppBannerSettingsHelper::WEB);
|
| + } else {
|
| + contents->GetMainFrame()->Send(new ChromeViewMsg_AppBannerAccepted(
|
| + contents->GetMainFrame()->GetRoutingID(), event_request_id(),
|
| + GetBannerType()));
|
| +
|
| + AppBannerSettingsHelper::RecordBannerInstallEvent(
|
| + contents, GetAppIdentifier(), AppBannerSettingsHelper::WEB);
|
| + }
|
| + }
|
| +}
|
| +
|
| +bool AppBannerManagerDesktop::IsWebAppInstalled(
|
| + content::BrowserContext* browser_context,
|
| + const GURL& start_url) {
|
| + return extensions::BookmarkAppHelper::BookmarkOrHostedAppInstalled(
|
| + browser_context, start_url);
|
| +}
|
| +
|
| +void AppBannerManagerDesktop::ShowBanner() {
|
| + content::WebContents* contents = web_contents();
|
| + DCHECK(contents && !manifest_.IsEmpty());
|
| +
|
| + Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
|
| + WebApplicationInfo web_app_info;
|
| +
|
| + bookmark_app_helper_.reset(
|
| + new extensions::BookmarkAppHelper(profile, web_app_info, contents));
|
| +
|
| + // This differs from Android, where there is a concrete
|
| + // AppBannerInfoBarAndroid class to interface with Java, and the manager calls
|
| + // the InfoBarService to show the banner. On desktop, an InfoBar class
|
| + // is not required, and the delegate calls the InfoBarService.
|
| + infobars::InfoBar* infobar = AppBannerInfoBarDelegateDesktop::Create(
|
| + contents, GetWeakPtr(), bookmark_app_helper_.get(), manifest_,
|
| + event_request_id());
|
| + if (infobar) {
|
| + RecordDidShowBanner("AppBanner.WebApp.Shown");
|
| + TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
|
| + }
|
| +}
|
| +
|
| +void AppBannerManagerDesktop::DidFinishLoad(
|
| + content::RenderFrameHost* render_frame_host,
|
| + const GURL& validated_url) {
|
| + // Explicitly forbid banners from triggering on navigation unless this is
|
| + // enabled.
|
| + if (!IsEnabled())
|
| + return;
|
| +
|
| + AppBannerManager::DidFinishLoad(render_frame_host, validated_url);
|
| +}
|
| +
|
| +void AppBannerManagerDesktop::OnEngagementIncreased(
|
| + content::WebContents* web_contents,
|
| + const GURL& url,
|
| + double score) {
|
| + // Explicitly forbid banners from triggering on navigation unless this is
|
| + // enabled.
|
| + if (!IsEnabled())
|
| + return;
|
| +
|
| + AppBannerManager::OnEngagementIncreased(web_contents, url, score);
|
| }
|
|
|
| } // namespace banners
|
|
|