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

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

Issue 156343002: Let AppBannerManager really create and manage banners (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Upload error Created 6 years, 10 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
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3d0edb258bce85ec8eae875fe40c4464a0376efc..aafc17469694fb132d8fbebffd4161d54904325c 100644
--- a/chrome/browser/android/banners/app_banner_manager.cc
+++ b/chrome/browser/android/banners/app_banner_manager.cc
@@ -8,6 +8,7 @@
#include "base/android/jni_string.h"
#include "base/command_line.h"
#include "chrome/browser/android/banners/app_banner_settings_helper.h"
+#include "chrome/browser/bitmap_fetcher.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_switches.h"
#include "content/public/browser/android/content_view_core.h"
@@ -35,6 +36,18 @@ void AppBannerManager::Destroy(JNIEnv* env, jobject obj) {
delete this;
}
+void AppBannerManager::BlockBanner(JNIEnv* env,
+ jobject obj,
+ jstring jurl,
+ jstring jpackage) {
+ if (!web_contents())
+ return;
+
+ GURL url(ConvertJavaStringToUTF8(env, jurl));
+ std::string package_name = ConvertJavaStringToUTF8(env, jpackage);
+ AppBannerSettingsHelper::Block(web_contents(), url, package_name);
+}
+
void AppBannerManager::ReplaceWebContents(JNIEnv* env,
jobject obj,
jobject jweb_contents) {
@@ -46,7 +59,34 @@ void AppBannerManager::ReplaceWebContents(JNIEnv* env,
void AppBannerManager::DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
- // TODO(dfalcantara): Get rid of the current banner.
+ // Get rid of the current banner.
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
+ if (jobj.is_null())
+ return;
+ Java_AppBannerManager_dismissCurrentBanner(env, jobj.obj());
+}
+
+void AppBannerManager::OnFetchComplete(const GURL url, const SkBitmap* bitmap) {
+ if (bitmap) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
+ if (jobj.is_null())
+ return;
+
+ ScopedJavaLocalRef<jstring> jimage_url(
+ ConvertUTF8ToJavaString(env, url.spec()));
+ ScopedJavaLocalRef<jobject> jimage = gfx::ConvertToJavaBitmap(bitmap);
+ Java_AppBannerManager_createBanner(env,
+ jobj.obj(),
+ jimage_url.obj(),
+ jimage.obj());
+ } else {
+ DVLOG(1) << "Failed to retrieve image: " << url;
+ }
+
+ fetcher_.reset();
}
void AppBannerManager::HandleMetaTagContent(const std::string& tag_content,
@@ -59,8 +99,35 @@ void AppBannerManager::HandleMetaTagContent(const std::string& tag_content,
return;
}
- // TODO(dfalcantara): Send the info to the Java side to begin building the
- // app banner.
+ // Send the info to the Java side to get info about the app.
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
+ if (jobj.is_null())
+ return;
+
+ ScopedJavaLocalRef<jstring> jurl(
+ ConvertUTF8ToJavaString(env, expected_url.spec()));
+ ScopedJavaLocalRef<jstring> jpackage(
+ ConvertUTF8ToJavaString(env, tag_content));
+ Java_AppBannerManager_prepareBanner(env,
+ jobj.obj(),
+ jurl.obj(),
+ jpackage.obj());
+}
+
+bool AppBannerManager::FetchIcon(JNIEnv* env,
+ jobject obj,
+ jstring jimage_url) {
+ std::string image_url = ConvertJavaStringToUTF8(env, jimage_url);
+ if (!web_contents())
+ return false;
+
+ // Begin asynchronously fetching the app icon.
+ Profile* profile =
+ Profile::FromBrowserContext(web_contents()->GetBrowserContext());
+ fetcher_.reset(new chrome::BitmapFetcher(GURL(image_url), this));
+ fetcher_.get()->Start(profile);
+ return true;
}
jlong Init(JNIEnv* env, jobject obj) {
@@ -69,11 +136,8 @@ jlong Init(JNIEnv* env, jobject obj) {
}
jboolean IsEnabled(JNIEnv* env, jclass clazz) {
- return false;
-
- // TODO(dfalcantara): Enable this when more of the pipeline is checked in.
- // return !CommandLine::ForCurrentProcess()->HasSwitch(
- // switches::kDisableAppBanners);
+ return !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableAppBanners);
}
// Register native methods
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698