| 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);
|
|
|