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

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

Issue 884623003: Suppress native app install banner if the site has a manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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/android/banners/app_banner_manager.cc
diff --git a/chrome/browser/android/banners/app_banner_manager.cc b/chrome/browser/android/banners/app_banner_manager.cc
index 15c55135969a8a2560cc38108de533bfbf00ef4d..14dadaa71e15d58416b82f002948b8bcd557a966 100644
--- a/chrome/browser/android/banners/app_banner_manager.cc
+++ b/chrome/browser/android/banners/app_banner_manager.cc
@@ -6,6 +6,7 @@
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
+#include "base/bind.h"
#include "base/command_line.h"
#include "base/metrics/histogram.h"
#include "chrome/browser/android/banners/app_banner_metrics_ids.h"
@@ -13,11 +14,15 @@
#include "chrome/browser/android/banners/app_banner_utilities.h"
#include "chrome/browser/bitmap_fetcher/bitmap_fetcher.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/render_messages.h"
#include "content/public/browser/android/content_view_core.h"
#include "content/public/browser/navigation_details.h"
+#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/frame_navigate_params.h"
+#include "content/public/common/manifest.h"
#include "jni/AppBannerManager_jni.h"
#include "net/base/load_flags.h"
#include "ui/gfx/android/java_bitmap.h"
@@ -32,8 +37,7 @@ const char kBannerTag[] = "google-play-id";
namespace banners {
AppBannerManager::AppBannerManager(JNIEnv* env, jobject obj)
- : MetaTagObserver(kBannerTag),
- weak_java_banner_view_manager_(env, obj) {}
+ : weak_java_banner_view_manager_(env, obj) {}
AppBannerManager::~AppBannerManager() {
}
@@ -73,6 +77,47 @@ void AppBannerManager::DidNavigateMainFrame(
Java_AppBannerManager_dismissCurrentBanner(env, jobj.obj(), DISMISS_NAVIGATE);
}
+void AppBannerManager::DidFinishLoad(
+ content::RenderFrameHost* render_frame_host,
+ const GURL& validated_url) {
+ if (render_frame_host->GetParent())
+ return;
+ validated_url_ = validated_url;
+
+ // See if the page has a manifest. Using Unretained(this) here is safe as the
+ // lifetime of this object extends beyond the lifetime of the web_contents(),
benwells 2015/01/28 09:24:23 I'm not absolutely sure of this and didn't get aro
gone 2015/01/28 18:44:13 Yeah, should be fine. The native AppBannerManager
+ // and when web_contents() is destroyed it will call OnDidGetManifest.
+ web_contents()->GetManifest(base::Bind(&AppBannerManager::OnDidGetManifest,
+ base::Unretained(this)));
+}
+
+void AppBannerManager::OnDidGetManifest(const content::Manifest& manifest) {
+ if (web_contents()->IsBeingDestroyed())
+ return;
+
+ if (manifest.IsEmpty()) {
+ // No manifest, see if there is a play store meta tag.
+ Send(new ChromeViewMsg_RetrieveMetaTagContent(routing_id(),
+ validated_url_,
+ kBannerTag));
+ return;
+ }
+
+ // TODO(benwells): Check triggering parameters here and if there is a meta
+ // tag.
+ // TODO(dfalcantara): Show banner for web site with manifest.
benwells 2015/01/28 09:24:23 I expect this TODO to move around.
+}
+
+bool AppBannerManager::OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(AppBannerManager, message)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DidRetrieveMetaTagContent,
+ OnDidRetrieveMetaTagContent)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
void AppBannerManager::OnFetchComplete(const GURL url, const SkBitmap* bitmap) {
if (bitmap) {
JNIEnv* env = base::android::AttachCurrentThread();
@@ -97,9 +142,17 @@ void AppBannerManager::OnFetchComplete(const GURL url, const SkBitmap* bitmap) {
fetcher_.reset();
}
-void AppBannerManager::HandleMetaTagContent(const std::string& tag_content,
- const GURL& expected_url) {
+void AppBannerManager::OnDidRetrieveMetaTagContent(
+ bool success,
+ const std::string& tag_name,
+ const std::string& tag_content,
+ const GURL& expected_url) {
DCHECK(web_contents());
+ if (!success || tag_name != kBannerTag || validated_url_ != expected_url ||
+ tag_content.size() >= chrome::kMaxMetaTagAttributeLength) {
+ return;
+ }
+
banners::TrackDisplayEvent(DISPLAY_BANNER_REQUESTED);
if (!AppBannerSettingsHelper::IsAllowed(web_contents(),

Powered by Google App Engine
This is Rietveld 408576698