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

Unified Diff: chrome/browser/android/logo_bridge.cc

Issue 1343913002: Introduce Animated Logo to Chrome on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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/logo_bridge.cc
diff --git a/chrome/browser/android/logo_bridge.cc b/chrome/browser/android/logo_bridge.cc
index d2250b2232e067f2e334d15deb60ca23118d2b4c..2c4a83a4e1a06e653d211f6d6f9b04dc1b9ab37b 100644
--- a/chrome/browser/android/logo_bridge.cc
+++ b/chrome/browser/android/logo_bridge.cc
@@ -7,6 +7,7 @@
#include <jni.h>
#include "base/android/jni_android.h"
+#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
@@ -18,8 +19,10 @@
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/android/java_bitmap.h"
-using base::android::ScopedJavaLocalRef;
+using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF8ToJavaString;
+using base::android::ScopedJavaLocalRef;
+using base::android::ToJavaByteArray;
namespace {
@@ -40,8 +43,12 @@ ScopedJavaLocalRef<jobject> ConvertLogoToJavaObject(
if (!logo->metadata.alt_text.empty())
j_alt_text = ConvertUTF8ToJavaString(env, logo->metadata.alt_text);
- return Java_LogoBridge_createLogo(
- env, j_bitmap.obj(), j_on_click_url.obj(), j_alt_text.obj());
+ ScopedJavaLocalRef<jstring> j_animated_url;
+ if (!logo->metadata.animated_url.empty())
+ j_animated_url = ConvertUTF8ToJavaString(env, logo->metadata.animated_url);
+
+ return Java_LogoBridge_createLogo(env, j_bitmap.obj(), j_on_click_url.obj(),
+ j_alt_text.obj(), j_animated_url.obj());
}
class LogoObserverAndroid : public search_provider_logos::LogoObserver {
@@ -110,6 +117,33 @@ void LogoBridge::GetCurrentLogo(JNIEnv* env,
logo_service_->GetLogo(observer);
}
+void LogoBridge::GetAnimatedLogo(JNIEnv* env,
+ jobject obj,
+ jobject j_listener,
+ jstring j_url) {
+ if (!logo_service_)
+ return;
+
+ j_listener_weak_ref = JavaObjectWeakGlobalRef(env, j_listener);
+ std::string url = ConvertJavaStringToUTF8(env, j_url);
+ // Callback will be cancelled if the bridge is destroyed.
+ logo_service_->GetAnimatedLogo(GURL(url),
+ base::Bind(&LogoBridge::OnAnimatedLogoReady,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void LogoBridge::OnAnimatedLogoReady(const std::string& raw_string) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> j_listener = j_listener_weak_ref.get(env);
+ if (j_listener.is_null())
+ return;
+
+ ScopedJavaLocalRef<jbyteArray> j_bytes =
+ ToJavaByteArray(env, reinterpret_cast<const uint8*>(raw_string.data()),
+ raw_string.length());
+ Java_GifListener_onGifDownloaded(env, j_listener.obj(), j_bytes.obj());
+}
+
// static
bool RegisterLogoBridge(JNIEnv* env) {
return RegisterNativesImpl(env);

Powered by Google App Engine
This is Rietveld 408576698