Chromium Code Reviews| Index: chrome/browser/banners/app_banner_manager.cc |
| diff --git a/chrome/browser/banners/app_banner_manager.cc b/chrome/browser/banners/app_banner_manager.cc |
| index 03587cb6bdb9e00845a49354ec40a55e20f053df..921f04bb2df08ca4ba602df6b98723144a4cc854 100644 |
| --- a/chrome/browser/banners/app_banner_manager.cc |
| +++ b/chrome/browser/banners/app_banner_manager.cc |
| @@ -4,30 +4,39 @@ |
| #include "chrome/browser/banners/app_banner_manager.h" |
| +#include <utility> |
| + |
| #include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/command_line.h" |
| +#include "base/lazy_instance.h" |
| +#include "base/memory/ptr_util.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/time/time.h" |
| +#include "build/build_config.h" |
| #include "chrome/browser/banners/app_banner_metrics.h" |
| #include "chrome/browser/banners/app_banner_settings_helper.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/engagement/site_engagement_service.h" |
| -#include "chrome/browser/installable/installable_logging.h" |
| -#include "chrome/browser/installable/installable_manager.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/chrome_switches.h" |
| -#include "chrome/common/render_messages.h" |
| #include "components/rappor/rappor_utils.h" |
| #include "content/public/browser/navigation_handle.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/origin_util.h" |
| -#include "third_party/WebKit/public/platform/modules/app_banner/WebAppBannerPromptReply.h" |
| +#include "mojo/public/cpp/bindings/interface_request.h" |
| +#include "services/shell/public/cpp/interface_provider.h" |
| #include "third_party/skia/include/core/SkBitmap.h" |
| #include "ui/display/display.h" |
| #include "ui/display/screen.h" |
| +#if defined(OS_ANDROID) |
| +#include "chrome/browser/android/banners/app_banner_manager_android.h" |
| +#else |
| +#include "chrome/browser/banners/app_banner_manager_desktop.h" |
| +#endif |
| + |
| namespace { |
| bool gDisableSecureCheckForTesting = false; |
| @@ -63,6 +72,39 @@ InstallableParams ParamsToPerformInstallableCheck(int ideal_icon_size_in_dp, |
| namespace banners { |
| // static |
| +void AppBannerManager::Create(content::WebContents* web_contents) { |
| +#if defined(OS_ANDROID) |
| + return AppBannerManagerAndroid::CreateForWebContents(web_contents); |
| +#else |
| + return AppBannerManagerDesktop::CreateForWebContents(web_contents); |
| +#endif |
| +} |
| + |
| +// static |
| +AppBannerManager* AppBannerManager::Get(content::WebContents* web_contents) { |
| +#if defined(OS_ANDROID) |
| + return AppBannerManagerAndroid::FromWebContents(web_contents); |
| +#else |
| + return AppBannerManagerDesktop::FromWebContents(web_contents); |
| +#endif |
| +} |
| + |
| +// static |
| +void AppBannerManager::BindToMojoRequest( |
| + content::RenderFrameHost* render_frame_host, |
| + blink::mojom::AppBannerServiceRequest request) { |
| + content::WebContents* web_contents = |
| + content::WebContents::FromRenderFrameHost(render_frame_host); |
| + DCHECK(web_contents); |
| + |
| + AppBannerManager* manager = AppBannerManager::Get(web_contents); |
| + DCHECK(manager); |
| + |
| + manager->binding_.reset(new mojo::Binding<blink::mojom::AppBannerService>( |
| + manager, std::move(request))); |
| +} |
| + |
| +// static |
| void AppBannerManager::DisableSecureSchemeCheckForTesting() { |
| gDisableSecureCheckForTesting = true; |
| } |
| @@ -131,6 +173,26 @@ void AppBannerManager::RequestAppBanner(const GURL& validated_url, |
| base::Bind(&AppBannerManager::OnDidGetManifest, GetWeakPtr())); |
| } |
| +void AppBannerManager::SendBannerAccepted(int request_id) { |
| + if (request_id != gCurrentRequestID) |
| + return; |
| + |
| + DCHECK(event_->is_bound()); |
| + (*event_)->BannerAccepted(request_id, GetBannerType()); |
| +} |
| + |
| +void AppBannerManager::SendBannerDismissed(int request_id) { |
| + if (request_id != gCurrentRequestID) |
| + return; |
| + |
| + DCHECK(event_->is_bound()); |
| + (*event_)->BannerDismissed(request_id); |
| +} |
| + |
| +void AppBannerManager::SetEvent(blink::mojom::AppBannerEventPtr event) { |
| + event_.reset(new blink::mojom::AppBannerEventPtr(std::move(event))); |
| +} |
| + |
| base::Closure AppBannerManager::FetchWebappSplashScreenImageCallback( |
| const std::string& webapp_id) { |
| return base::Closure(); |
| @@ -325,9 +387,13 @@ void AppBannerManager::SendBannerPromptRequest() { |
| TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_CREATED); |
| event_request_id_ = ++gCurrentRequestID; |
| - content::RenderFrameHost* frame = web_contents()->GetMainFrame(); |
| - frame->Send(new ChromeViewMsg_AppBannerPromptRequest( |
| - frame->GetRoutingID(), event_request_id_, GetBannerType())); |
| + |
| + web_contents()->GetMainFrame()->GetRemoteInterfaces()->GetInterface( |
| + mojo::GetProxy(&banner_client_)); |
| + |
| + banner_client_->BannerPromptRequest( |
| + event_request_id_, GetBannerType(), |
| + base::Bind(&AppBannerManager::OnBannerPromptReply, GetWeakPtr())); |
| } |
| void AppBannerManager::DidStartNavigation(content::NavigationHandle* handle) { |
| @@ -456,27 +522,10 @@ bool AppBannerManager::CheckIfShouldShowBanner() { |
| return false; |
| } |
| -bool AppBannerManager::OnMessageReceived( |
| - const IPC::Message& message, |
| - content::RenderFrameHost* render_frame_host) { |
| - bool handled = true; |
| - |
| - IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(AppBannerManager, message, render_frame_host) |
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_AppBannerPromptReply, |
| - OnBannerPromptReply) |
| - IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RequestShowAppBanner, |
| - OnRequestShowAppBanner) |
| - IPC_MESSAGE_UNHANDLED(handled = false) |
| - IPC_END_MESSAGE_MAP() |
| - |
| - return handled; |
| -} |
| - |
| void AppBannerManager::OnBannerPromptReply( |
| - content::RenderFrameHost* render_frame_host, |
| int request_id, |
| - blink::WebAppBannerPromptReply reply, |
| - std::string referrer) { |
| + blink::mojom::AppBannerPromptReply reply, |
| + mojo::String referrer) { |
|
Sam McNally
2016/10/06 07:17:43
const std::string&
dominickn
2016/10/06 22:58:12
Done.
|
| content::WebContents* contents = web_contents(); |
| if (request_id != event_request_id_) |
| return; |
| @@ -489,8 +538,8 @@ void AppBannerManager::OnBannerPromptReply( |
| // We use the additional page_requested_prompt_ variable because the redisplay |
| // request may be received *before* the Cancel prompt reply (e.g. if redisplay |
| // is requested in the beforeinstallprompt event handler). |
| - referrer_ = referrer; |
| - if (reply == blink::WebAppBannerPromptReply::Cancel && |
| + referrer_ = referrer.get(); |
| + if (reply == blink::mojom::AppBannerPromptReply::CANCEL && |
| !page_requested_prompt_) { |
| TrackBeforeInstallEvent(BEFORE_INSTALL_EVENT_PREVENT_DEFAULT_CALLED); |
| was_canceled_by_page_ = true; |
| @@ -521,14 +570,12 @@ void AppBannerManager::OnBannerPromptReply( |
| is_active_ = false; |
| } |
| -void AppBannerManager::OnRequestShowAppBanner( |
| - content::RenderFrameHost* render_frame_host, |
| - int request_id) { |
| +void AppBannerManager::DisplayAppBanner(int request_id) { |
| if (was_canceled_by_page_) { |
| // Simulate a non-canceled OnBannerPromptReply to show the delayed banner. |
| // Don't reset |was_canceled_by_page_| yet for metrics purposes. |
| - OnBannerPromptReply(render_frame_host, request_id, |
| - blink::WebAppBannerPromptReply::None, referrer_); |
| + OnBannerPromptReply(request_id, blink::mojom::AppBannerPromptReply::NONE, |
| + referrer_); |
| } else { |
| // Log that the prompt request was made for when we get the prompt reply. |
| page_requested_prompt_ = true; |