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

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: 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
« no previous file with comments | « chrome/browser/android/ntp/most_visited_sites_bridge.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 class MostVisitedSitesBridge::Observer
43 : public MostVisitedSitesObserver {
44 public:
45 Observer(JNIEnv* env, const JavaParamRef<jobject>& obj);
46
47 void OnMostVisitedURLsAvailable(
48 const std::vector<base::string16>& titles,
49 const std::vector<std::string>& urls,
50 const std::vector<std::string>& whitelist_icon_paths) override;
51
52 void OnPopularURLsAvailable(
53 const std::vector<std::string>& urls,
54 const std::vector<std::string>& favicon_urls,
55 const std::vector<std::string>& large_icon_urls) override;
56
57 private:
58 ScopedJavaGlobalRef<jobject> observer_;
59
60 DISALLOW_COPY_AND_ASSIGN(Observer);
61 };
62
63 MostVisitedSitesBridge::Observer::Observer(
64 JNIEnv* env, const JavaParamRef<jobject>& obj)
65 : observer_(env, obj) {}
66
67 void MostVisitedSitesBridge::Observer::OnMostVisitedURLsAvailable(
68 const std::vector<base::string16>& titles,
69 const std::vector<std::string>& urls,
70 const std::vector<std::string>& whitelist_icon_paths) {
71 JNIEnv* env = AttachCurrentThread();
72 DCHECK_EQ(titles.size(), urls.size());
73 DCHECK_EQ(titles.size(), whitelist_icon_paths.size());
74 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
75 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(),
76 ToJavaArrayOfStrings(env, urls).obj(),
77 ToJavaArrayOfStrings(env, whitelist_icon_paths).obj());
78 }
79
80 void MostVisitedSitesBridge::Observer::OnPopularURLsAvailable(
81 const std::vector<std::string>& urls,
82 const std::vector<std::string>& favicon_urls,
83 const std::vector<std::string>& large_icon_urls) {
84 JNIEnv* env = AttachCurrentThread();
85 Java_MostVisitedURLsObserver_onPopularURLsAvailable(
86 env, observer_.obj(), ToJavaArrayOfStrings(env, urls).obj(),
87 ToJavaArrayOfStrings(env, favicon_urls).obj(),
88 ToJavaArrayOfStrings(env, large_icon_urls).obj());
89 }
90
91 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile)
92 : most_visited_(profile) {}
93
94 MostVisitedSitesBridge::~MostVisitedSitesBridge() {}
95
96 void MostVisitedSitesBridge::Destroy(
97 JNIEnv* env, const JavaParamRef<jobject>& obj) {
98 delete this;
99 }
100
101 void MostVisitedSitesBridge::SetMostVisitedURLsObserver(
102 JNIEnv* env,
103 const JavaParamRef<jobject>& obj,
104 const JavaParamRef<jobject>& j_observer,
105 jint num_sites) {
106 observer_.reset(new Observer(env, j_observer));
107 most_visited_.SetMostVisitedURLsObserver(observer_.get(), num_sites);
108 }
109
110 void MostVisitedSitesBridge::GetURLThumbnail(
111 JNIEnv* env,
112 const JavaParamRef<jobject>& obj,
113 const JavaParamRef<jstring>& j_url,
114 const JavaParamRef<jobject>& j_callback_obj) {
115 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback(
116 new ScopedJavaGlobalRef<jobject>(env, j_callback_obj));
117 auto callback = base::Bind(&CallJavaWithBitmap, base::Passed(&j_callback));
118 GURL url(ConvertJavaStringToUTF8(env, j_url));
119 most_visited_.GetURLThumbnail(url, callback);
120 }
121
122 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl(
123 JNIEnv* env,
124 const JavaParamRef<jobject>& obj,
125 const JavaParamRef<jstring>& j_url,
126 jboolean add_url) {
127 GURL url(ConvertJavaStringToUTF8(env, j_url));
128 most_visited_.AddOrRemoveBlacklistedUrl(url, add_url);
129 }
130
131 void MostVisitedSitesBridge::RecordTileTypeMetrics(
132 JNIEnv* env,
133 const JavaParamRef<jobject>& obj,
134 const JavaParamRef<jintArray>& jtile_types) {
135 std::vector<int> tile_types;
136 base::android::JavaIntArrayToIntVector(env, jtile_types, &tile_types);
137 most_visited_.RecordTileTypeMetrics(tile_types);
138 }
139
140 void MostVisitedSitesBridge::RecordOpenedMostVisitedItem(
141 JNIEnv* env,
142 const JavaParamRef<jobject>& obj,
143 jint index,
144 jint tile_type) {
145 most_visited_.RecordOpenedMostVisitedItem(index, tile_type);
146 }
147
148 // static
149 bool MostVisitedSitesBridge::Register(JNIEnv* env) {
150 return RegisterNativesImpl(env);
151 }
152
153 static jlong Init(JNIEnv* env,
154 const JavaParamRef<jobject>& obj,
155 const JavaParamRef<jobject>& jprofile) {
156 MostVisitedSitesBridge* most_visited_sites =
157 new MostVisitedSitesBridge(
158 ProfileAndroid::FromProfileAndroid(jprofile));
159 return reinterpret_cast<intptr_t>(most_visited_sites);
160 }
OLDNEW
« no previous file with comments | « chrome/browser/android/ntp/most_visited_sites_bridge.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698