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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/logo_bridge.h" 5 #include "chrome/browser/android/logo_bridge.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h" 11 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h" 12 #include "base/android/scoped_java_ref.h"
12 #include "base/bind.h" 13 #include "base/bind.h"
13 #include "chrome/browser/android/logo_service.h" 14 #include "chrome/browser/android/logo_service.h"
14 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/profiles/profile_android.h" 16 #include "chrome/browser/profiles/profile_android.h"
16 #include "components/search_provider_logos/logo_tracker.h" 17 #include "components/search_provider_logos/logo_tracker.h"
17 #include "jni/LogoBridge_jni.h" 18 #include "jni/LogoBridge_jni.h"
18 #include "third_party/skia/include/core/SkBitmap.h" 19 #include "third_party/skia/include/core/SkBitmap.h"
19 #include "ui/gfx/android/java_bitmap.h" 20 #include "ui/gfx/android/java_bitmap.h"
20 21
22 using base::android::ConvertJavaStringToUTF8;
23 using base::android::ConvertUTF8ToJavaString;
21 using base::android::ScopedJavaLocalRef; 24 using base::android::ScopedJavaLocalRef;
22 using base::android::ConvertUTF8ToJavaString; 25 using base::android::ToJavaByteArray;
23 26
24 namespace { 27 namespace {
25 28
26 // Converts a C++ Logo to a Java Logo. 29 // Converts a C++ Logo to a Java Logo.
27 ScopedJavaLocalRef<jobject> ConvertLogoToJavaObject( 30 ScopedJavaLocalRef<jobject> ConvertLogoToJavaObject(
28 JNIEnv* env, 31 JNIEnv* env,
29 const search_provider_logos::Logo* logo) { 32 const search_provider_logos::Logo* logo) {
30 if (!logo) 33 if (!logo)
31 return ScopedJavaLocalRef<jobject>(); 34 return ScopedJavaLocalRef<jobject>();
32 35
33 ScopedJavaLocalRef<jobject> j_bitmap = gfx::ConvertToJavaBitmap(&logo->image); 36 ScopedJavaLocalRef<jobject> j_bitmap = gfx::ConvertToJavaBitmap(&logo->image);
34 37
35 ScopedJavaLocalRef<jstring> j_on_click_url; 38 ScopedJavaLocalRef<jstring> j_on_click_url;
36 if (!logo->metadata.on_click_url.empty()) 39 if (!logo->metadata.on_click_url.empty())
37 j_on_click_url = ConvertUTF8ToJavaString(env, logo->metadata.on_click_url); 40 j_on_click_url = ConvertUTF8ToJavaString(env, logo->metadata.on_click_url);
38 41
39 ScopedJavaLocalRef<jstring> j_alt_text; 42 ScopedJavaLocalRef<jstring> j_alt_text;
40 if (!logo->metadata.alt_text.empty()) 43 if (!logo->metadata.alt_text.empty())
41 j_alt_text = ConvertUTF8ToJavaString(env, logo->metadata.alt_text); 44 j_alt_text = ConvertUTF8ToJavaString(env, logo->metadata.alt_text);
42 45
43 return Java_LogoBridge_createLogo( 46 ScopedJavaLocalRef<jstring> j_animated_url;
44 env, j_bitmap.obj(), j_on_click_url.obj(), j_alt_text.obj()); 47 if (!logo->metadata.animated_url.empty())
48 j_animated_url = ConvertUTF8ToJavaString(env, logo->metadata.animated_url);
49
50 return Java_LogoBridge_createLogo(env, j_bitmap.obj(), j_on_click_url.obj(),
51 j_alt_text.obj(), j_animated_url.obj());
45 } 52 }
46 53
47 class LogoObserverAndroid : public search_provider_logos::LogoObserver { 54 class LogoObserverAndroid : public search_provider_logos::LogoObserver {
48 public: 55 public:
49 LogoObserverAndroid(base::WeakPtr<LogoBridge> logo_bridge, 56 LogoObserverAndroid(base::WeakPtr<LogoBridge> logo_bridge,
50 JNIEnv* env, 57 JNIEnv* env,
51 jobject j_logo_observer) 58 jobject j_logo_observer)
52 : logo_bridge_(logo_bridge) { 59 : logo_bridge_(logo_bridge) {
53 j_logo_observer_.Reset(env, j_logo_observer); 60 j_logo_observer_.Reset(env, j_logo_observer);
54 } 61 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 jobject j_logo_observer) { 110 jobject j_logo_observer) {
104 if (!logo_service_) 111 if (!logo_service_)
105 return; 112 return;
106 113
107 // |observer| is deleted in LogoObserverAndroid::OnObserverRemoved(). 114 // |observer| is deleted in LogoObserverAndroid::OnObserverRemoved().
108 LogoObserverAndroid* observer = new LogoObserverAndroid( 115 LogoObserverAndroid* observer = new LogoObserverAndroid(
109 weak_ptr_factory_.GetWeakPtr(), env, j_logo_observer); 116 weak_ptr_factory_.GetWeakPtr(), env, j_logo_observer);
110 logo_service_->GetLogo(observer); 117 logo_service_->GetLogo(observer);
111 } 118 }
112 119
120 void LogoBridge::GetAnimatedLogo(JNIEnv* env,
121 jobject obj,
122 jobject j_listener,
123 jstring j_url) {
124 if (!logo_service_)
125 return;
126
127 j_listener_weak_ref = JavaObjectWeakGlobalRef(env, j_listener);
128 std::string url = ConvertJavaStringToUTF8(env, j_url);
129 // Callback will be cancelled if the bridge is destroyed.
130 logo_service_->GetAnimatedLogo(GURL(url),
131 base::Bind(&LogoBridge::OnAnimatedLogoReady,
132 weak_ptr_factory_.GetWeakPtr()));
133 }
134
135 void LogoBridge::OnAnimatedLogoReady(const std::string& raw_string) {
136 JNIEnv* env = base::android::AttachCurrentThread();
137 ScopedJavaLocalRef<jobject> j_listener = j_listener_weak_ref.get(env);
138 if (j_listener.is_null())
139 return;
140
141 ScopedJavaLocalRef<jbyteArray> j_bytes =
142 ToJavaByteArray(env, reinterpret_cast<const uint8*>(raw_string.data()),
143 raw_string.length());
144 Java_GifListener_onGifDownloaded(env, j_listener.obj(), j_bytes.obj());
145 }
146
113 // static 147 // static
114 bool RegisterLogoBridge(JNIEnv* env) { 148 bool RegisterLogoBridge(JNIEnv* env) {
115 return RegisterNativesImpl(env); 149 return RegisterNativesImpl(env);
116 } 150 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698