OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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/ntp/most_visited_sites_bridge.h" | 5 #include "chrome/browser/android/ntp/most_visited_sites_bridge.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
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_array.h" |
11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
12 #include "base/android/scoped_java_ref.h" | 12 #include "base/android/scoped_java_ref.h" |
13 #include "base/bind.h" | 13 #include "base/bind.h" |
14 #include "base/callback.h" | 14 #include "base/callback.h" |
15 #include "chrome/browser/android/ntp/popular_sites.h" | |
15 #include "chrome/browser/profiles/profile_android.h" | 16 #include "chrome/browser/profiles/profile_android.h" |
16 #include "jni/MostVisitedSites_jni.h" | 17 #include "jni/MostVisitedSites_jni.h" |
17 #include "ui/gfx/android/java_bitmap.h" | 18 #include "ui/gfx/android/java_bitmap.h" |
18 #include "url/gurl.h" | 19 #include "url/gurl.h" |
19 | 20 |
20 using base::android::AttachCurrentThread; | 21 using base::android::AttachCurrentThread; |
21 using base::android::ConvertJavaStringToUTF8; | 22 using base::android::ConvertJavaStringToUTF8; |
22 using base::android::ScopedJavaGlobalRef; | 23 using base::android::ScopedJavaGlobalRef; |
23 using base::android::ScopedJavaLocalRef; | 24 using base::android::ScopedJavaLocalRef; |
24 using base::android::ToJavaArrayOfStrings; | 25 using base::android::ToJavaArrayOfStrings; |
25 | 26 |
26 namespace { | 27 namespace { |
27 | 28 |
28 void CallJavaWithBitmap( | 29 void CallJavaWithBitmap( |
29 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback, | 30 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback, |
30 bool is_local_thumbnail, | 31 bool is_local_thumbnail, |
31 const SkBitmap* bitmap) { | 32 const SkBitmap* bitmap) { |
32 JNIEnv* env = AttachCurrentThread(); | 33 JNIEnv* env = AttachCurrentThread(); |
33 ScopedJavaLocalRef<jobject> j_bitmap; | 34 ScopedJavaLocalRef<jobject> j_bitmap; |
34 if (bitmap) | 35 if (bitmap) |
35 j_bitmap = gfx::ConvertToJavaBitmap(bitmap); | 36 j_bitmap = gfx::ConvertToJavaBitmap(bitmap); |
36 Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable( | 37 Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable( |
37 env, j_callback->obj(), j_bitmap.obj(), is_local_thumbnail); | 38 env, j_callback->obj(), j_bitmap.obj(), is_local_thumbnail); |
38 } | 39 } |
39 | 40 |
40 } // namespace | 41 } // namespace |
41 | 42 |
42 class MostVisitedSitesBridge::Observer | 43 class MostVisitedSitesBridge::Observer |
43 : public MostVisitedSitesObserver { | 44 : public MostVisitedSites::Observer { |
44 public: | 45 public: |
45 Observer(JNIEnv* env, const JavaParamRef<jobject>& obj); | 46 Observer(JNIEnv* env, const JavaParamRef<jobject>& obj); |
46 | 47 |
47 void OnMostVisitedURLsAvailable( | 48 void OnMostVisitedURLsAvailable( |
48 const std::vector<base::string16>& titles, | 49 const MostVisitedSites::SuggestionsVector& suggestions) override; |
49 const std::vector<std::string>& urls, | |
50 const std::vector<std::string>& whitelist_icon_paths) override; | |
51 | 50 |
52 void OnPopularURLsAvailable( | 51 void OnPopularURLsAvailable( |
53 const std::vector<std::string>& urls, | 52 const MostVisitedSites::PopularSitesVector& sites) override; |
54 const std::vector<std::string>& favicon_urls, | |
55 const std::vector<std::string>& large_icon_urls) override; | |
56 | 53 |
57 private: | 54 private: |
58 ScopedJavaGlobalRef<jobject> observer_; | 55 ScopedJavaGlobalRef<jobject> observer_; |
59 | 56 |
60 DISALLOW_COPY_AND_ASSIGN(Observer); | 57 DISALLOW_COPY_AND_ASSIGN(Observer); |
61 }; | 58 }; |
62 | 59 |
63 MostVisitedSitesBridge::Observer::Observer( | 60 MostVisitedSitesBridge::Observer::Observer( |
64 JNIEnv* env, const JavaParamRef<jobject>& obj) | 61 JNIEnv* env, const JavaParamRef<jobject>& obj) |
65 : observer_(env, obj) {} | 62 : observer_(env, obj) {} |
66 | 63 |
67 void MostVisitedSitesBridge::Observer::OnMostVisitedURLsAvailable( | 64 void MostVisitedSitesBridge::Observer::OnMostVisitedURLsAvailable( |
68 const std::vector<base::string16>& titles, | 65 const MostVisitedSites::SuggestionsVector& suggestions) { |
69 const std::vector<std::string>& urls, | |
70 const std::vector<std::string>& whitelist_icon_paths) { | |
71 JNIEnv* env = AttachCurrentThread(); | 66 JNIEnv* env = AttachCurrentThread(); |
72 DCHECK_EQ(titles.size(), urls.size()); | 67 std::vector<base::string16> titles; |
73 DCHECK_EQ(titles.size(), whitelist_icon_paths.size()); | 68 std::vector<std::string> urls; |
69 std::vector<std::string> whitelist_icon_paths; | |
70 titles.reserve(suggestions.size()); | |
71 urls.reserve(suggestions.size()); | |
Bernhard Bauer
2016/04/26 14:29:58
Why are we not doing that for |whitelist_icon_path
sfiera
2016/04/26 14:42:26
It looks like here I was just moving the old code
| |
72 for (const auto& suggestion : suggestions) { | |
73 titles.push_back(suggestion.title); | |
74 urls.push_back(suggestion.url.spec()); | |
75 whitelist_icon_paths.push_back(suggestion.whitelist_icon_path.value()); | |
76 } | |
74 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( | 77 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( |
75 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), | 78 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), |
76 ToJavaArrayOfStrings(env, urls).obj(), | 79 ToJavaArrayOfStrings(env, urls).obj(), |
77 ToJavaArrayOfStrings(env, whitelist_icon_paths).obj()); | 80 ToJavaArrayOfStrings(env, whitelist_icon_paths).obj()); |
78 } | 81 } |
79 | 82 |
80 void MostVisitedSitesBridge::Observer::OnPopularURLsAvailable( | 83 void MostVisitedSitesBridge::Observer::OnPopularURLsAvailable( |
81 const std::vector<std::string>& urls, | 84 const MostVisitedSites::PopularSitesVector& sites) { |
82 const std::vector<std::string>& favicon_urls, | |
83 const std::vector<std::string>& large_icon_urls) { | |
84 JNIEnv* env = AttachCurrentThread(); | 85 JNIEnv* env = AttachCurrentThread(); |
86 std::vector<std::string> urls; | |
87 std::vector<std::string> favicon_urls; | |
88 std::vector<std::string> large_icon_urls; | |
89 for (const auto& site : sites) { | |
90 urls.emplace_back(site.url.spec()); | |
Bernhard Bauer
2016/04/26 14:29:58
Why emplace_back here, but push_back above?
sfiera
2016/04/26 14:42:26
...but here I wrote it myself.
So, the inefficien
Bernhard Bauer
2016/04/26 14:50:49
:-D
To be fair, the old code was written before e
| |
91 favicon_urls.emplace_back(site.favicon_url.spec()); | |
92 large_icon_urls.emplace_back(site.large_icon_url.spec()); | |
93 } | |
85 Java_MostVisitedURLsObserver_onPopularURLsAvailable( | 94 Java_MostVisitedURLsObserver_onPopularURLsAvailable( |
86 env, observer_.obj(), ToJavaArrayOfStrings(env, urls).obj(), | 95 env, observer_.obj(), ToJavaArrayOfStrings(env, urls).obj(), |
87 ToJavaArrayOfStrings(env, favicon_urls).obj(), | 96 ToJavaArrayOfStrings(env, favicon_urls).obj(), |
88 ToJavaArrayOfStrings(env, large_icon_urls).obj()); | 97 ToJavaArrayOfStrings(env, large_icon_urls).obj()); |
89 } | 98 } |
90 | 99 |
91 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) | 100 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) |
92 : most_visited_(profile) {} | 101 : most_visited_(profile) {} |
93 | 102 |
94 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} | 103 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
151 } | 160 } |
152 | 161 |
153 static jlong Init(JNIEnv* env, | 162 static jlong Init(JNIEnv* env, |
154 const JavaParamRef<jobject>& obj, | 163 const JavaParamRef<jobject>& obj, |
155 const JavaParamRef<jobject>& jprofile) { | 164 const JavaParamRef<jobject>& jprofile) { |
156 MostVisitedSitesBridge* most_visited_sites = | 165 MostVisitedSitesBridge* most_visited_sites = |
157 new MostVisitedSitesBridge( | 166 new MostVisitedSitesBridge( |
158 ProfileAndroid::FromProfileAndroid(jprofile)); | 167 ProfileAndroid::FromProfileAndroid(jprofile)); |
159 return reinterpret_cast<intptr_t>(most_visited_sites); | 168 return reinterpret_cast<intptr_t>(most_visited_sites); |
160 } | 169 } |
OLD | NEW |