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

Side by Side Diff: chrome/browser/android/ntp/most_visited_sites_bridge.cc

Issue 1899683003: NTP tiles: Split C++ and Java MostVisitedSites classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 8 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
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/android/ntp/most_visited_sites_bridge.h"
6
7 #include <utility>
8
9 #include "base/android/jni_android.h"
10 #include "base/android/jni_array.h"
11 #include "base/android/jni_string.h"
12 #include "base/android/scoped_java_ref.h"
13 #include "base/bind.h"
14 #include "base/callback.h"
15 #include "chrome/browser/profiles/profile_android.h"
16 #include "jni/MostVisitedSites_jni.h"
17 #include "ui/gfx/android/java_bitmap.h"
18 #include "url/gurl.h"
19
20 using base::android::AttachCurrentThread;
21 using base::android::ConvertJavaStringToUTF8;
22 using base::android::ScopedJavaGlobalRef;
23 using base::android::ScopedJavaLocalRef;
24 using base::android::ToJavaArrayOfStrings;
25
26 namespace {
27
28 void CallJavaWithBitmap(
29 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback,
30 bool is_local_thumbnail,
31 const SkBitmap* bitmap) {
32 JNIEnv* env = AttachCurrentThread();
33 ScopedJavaLocalRef<jobject> j_bitmap;
34 if (bitmap)
35 j_bitmap = gfx::ConvertToJavaBitmap(bitmap);
36 Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable(
37 env, j_callback->obj(), j_bitmap.obj(), is_local_thumbnail);
38 }
39
40 } // namespace
41
42 // static
43 bool MostVisitedSitesBridge::Register(JNIEnv* env) {
Bernhard Bauer 2016/04/20 13:35:11 Nit: These don't really match the header order.
sfiera 2016/04/20 14:11:19 Done.
44 return RegisterNativesImpl(env);
45 }
46
47 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile)
48 : most_visited_(profile) { }
Bernhard Bauer 2016/04/20 13:35:11 Nit: no space between the braces.
sfiera 2016/04/20 14:11:20 Done.
49
50 MostVisitedSitesBridge::~MostVisitedSitesBridge() { }
51
52 void MostVisitedSitesBridge::Destroy(
53 JNIEnv* env, const JavaParamRef<jobject>& obj) {
54 delete this;
55 }
56
57 void MostVisitedSitesBridge::SetMostVisitedURLsObserver(
58 JNIEnv* env,
59 const JavaParamRef<jobject>& obj,
60 const JavaParamRef<jobject>& j_observer,
61 jint num_sites) {
62 observer_.reset(new Observer(env, j_observer));
63 most_visited_.SetMostVisitedURLsObserver(observer_.get(), num_sites);
64 }
65
66 void MostVisitedSitesBridge::GetURLThumbnail(
67 JNIEnv* env,
68 const JavaParamRef<jobject>& obj,
69 const JavaParamRef<jstring>& j_url,
70 const JavaParamRef<jobject>& j_callback_obj) {
71 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback(
72 new ScopedJavaGlobalRef<jobject>(env, j_callback_obj));
73 auto callback = base::Bind(&CallJavaWithBitmap, base::Passed(&j_callback));
74 GURL url(ConvertJavaStringToUTF8(env, j_url));
75 most_visited_.GetURLThumbnail(url, callback);
76 }
77
78 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl(
79 JNIEnv* env,
80 const JavaParamRef<jobject>& obj,
81 const JavaParamRef<jstring>& j_url,
82 jboolean add_url) {
83 GURL url(ConvertJavaStringToUTF8(env, j_url));
84 most_visited_.AddOrRemoveBlacklistedUrl(url, add_url);
85 }
86
87 void MostVisitedSitesBridge::RecordTileTypeMetrics(
88 JNIEnv* env,
89 const JavaParamRef<jobject>& obj,
90 const JavaParamRef<jintArray>& jtile_types) {
91 std::vector<int> tile_types;
92 base::android::JavaIntArrayToIntVector(env, jtile_types, &tile_types);
93 most_visited_.RecordTileTypeMetrics(tile_types);
94 }
95
96 void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
97 JNIEnv* env,
98 const JavaParamRef<jobject>& obj,
99 jint index,
100 jint tile_type) {
101 most_visited_.RecordOpenedMostVisitedItem(index, tile_type);
102 }
103
104 MostVisitedSitesBridge::Observer::Observer(
105 JNIEnv* env, const JavaParamRef<jobject>& obj)
106 : observer_(env, obj) {}
107
108 void MostVisitedSitesBridge::Observer::OnMostVisitedURLsAvailable(
109 const std::vector<base::string16>& titles,
110 const std::vector<std::string>& urls,
111 const std::vector<std::string>& whitelist_icon_paths) {
112 JNIEnv* env = AttachCurrentThread();
113 DCHECK_EQ(titles.size(), urls.size());
114 DCHECK_EQ(titles.size(), whitelist_icon_paths.size());
115 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
116 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(),
117 ToJavaArrayOfStrings(env, urls).obj(),
118 ToJavaArrayOfStrings(env, whitelist_icon_paths).obj());
119 }
120
121 void MostVisitedSitesBridge::Observer::OnPopularURLsAvailable(
122 const std::vector<std::string>& urls,
123 const std::vector<std::string>& favicon_urls,
124 const std::vector<std::string>& large_icon_urls) {
125 JNIEnv* env = AttachCurrentThread();
126 Java_MostVisitedURLsObserver_onPopularURLsAvailable(
127 env, observer_.obj(), ToJavaArrayOfStrings(env, urls).obj(),
128 ToJavaArrayOfStrings(env, favicon_urls).obj(),
129 ToJavaArrayOfStrings(env, large_icon_urls).obj());
130 }
131
132 static jlong Init(JNIEnv* env,
133 const JavaParamRef<jobject>& obj,
134 const JavaParamRef<jobject>& jprofile) {
135 MostVisitedSitesBridge* most_visited_sites =
136 new MostVisitedSitesBridge(
137 ProfileAndroid::FromProfileAndroid(jprofile));
138 return reinterpret_cast<intptr_t>(most_visited_sites);
139 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698