Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2871)

Unified Diff: chrome/browser/banners/app_banner_manager.cc

Issue 2393513004: Convert app banners to use Mojo. (Closed)
Patch Set: Fix Win clang compile Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698