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" | |
14 #include "base/callback.h" | |
15 #include "base/memory/ptr_util.h" | |
16 #include "chrome/browser/android/ntp/popular_sites.h" | |
17 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
18 #include "chrome/browser/favicon/favicon_service_factory.h" | 14 #include "chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.h" |
19 #include "chrome/browser/history/top_sites_factory.h" | |
20 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
21 #include "chrome/browser/profiles/profile_android.h" | 16 #include "chrome/browser/profiles/profile_android.h" |
22 #include "chrome/browser/search/suggestions/image_decoder_impl.h" | |
23 #include "chrome/browser/search/suggestions/suggestions_service_factory.h" | |
24 #include "chrome/browser/search_engines/template_url_service_factory.h" | |
25 #include "chrome/browser/supervised_user/supervised_user_service.h" | |
26 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | |
27 #include "chrome/browser/supervised_user/supervised_user_url_filter.h" | |
28 #include "chrome/browser/thumbnails/thumbnail_list_source.h" | 17 #include "chrome/browser/thumbnails/thumbnail_list_source.h" |
29 #include "components/history/core/browser/top_sites.h" | |
30 #include "components/image_fetcher/image_fetcher_impl.h" | |
31 #include "components/ntp_tiles/icon_cacher.h" | |
32 #include "components/ntp_tiles/metrics.h" | 18 #include "components/ntp_tiles/metrics.h" |
33 #include "components/ntp_tiles/popular_sites.h" | 19 #include "components/ntp_tiles/most_visited_sites.h" |
34 #include "components/rappor/rappor_service_impl.h" | 20 #include "components/rappor/rappor_service_impl.h" |
35 #include "components/safe_json/safe_json_parser.h" | |
36 #include "content/public/browser/browser_thread.h" | |
37 #include "content/public/browser/url_data_source.h" | |
38 #include "jni/MostVisitedSites_jni.h" | 21 #include "jni/MostVisitedSites_jni.h" |
39 #include "ui/gfx/android/java_bitmap.h" | 22 #include "ui/gfx/android/java_bitmap.h" |
40 #include "url/gurl.h" | |
41 | 23 |
42 using base::android::AttachCurrentThread; | 24 using base::android::AttachCurrentThread; |
43 using base::android::ConvertJavaStringToUTF8; | 25 using base::android::ConvertJavaStringToUTF8; |
44 using base::android::ConvertUTF8ToJavaString; | 26 using base::android::ConvertUTF8ToJavaString; |
45 using base::android::JavaParamRef; | 27 using base::android::JavaParamRef; |
46 using base::android::ScopedJavaGlobalRef; | 28 using base::android::ScopedJavaGlobalRef; |
47 using base::android::ScopedJavaLocalRef; | 29 using base::android::ScopedJavaLocalRef; |
48 using base::android::ToJavaArrayOfStrings; | 30 using base::android::ToJavaArrayOfStrings; |
49 using base::android::ToJavaIntArray; | 31 using base::android::ToJavaIntArray; |
50 using content::BrowserThread; | 32 using ntp_tiles::MostVisitedSites; |
| 33 using ntp_tiles::NTPTileSource; |
| 34 using ntp_tiles::NTPTilesVector; |
51 using ntp_tiles::metrics::MostVisitedTileType; | 35 using ntp_tiles::metrics::MostVisitedTileType; |
52 using ntp_tiles::metrics::TileImpression; | 36 using ntp_tiles::metrics::TileImpression; |
53 using ntp_tiles::MostVisitedSites; | |
54 using ntp_tiles::MostVisitedSitesSupervisor; | |
55 using ntp_tiles::NTPTileSource; | |
56 using suggestions::SuggestionsServiceFactory; | |
57 | |
58 MostVisitedSitesBridge::SupervisorBridge::SupervisorBridge(Profile* profile) | |
59 : profile_(profile), | |
60 supervisor_observer_(nullptr), | |
61 register_observer_(this) { | |
62 register_observer_.Add(SupervisedUserServiceFactory::GetForProfile(profile_)); | |
63 } | |
64 | |
65 MostVisitedSitesBridge::SupervisorBridge::~SupervisorBridge() {} | |
66 | |
67 void MostVisitedSitesBridge::SupervisorBridge::SetObserver( | |
68 Observer* new_observer) { | |
69 if (new_observer) | |
70 DCHECK(!supervisor_observer_); | |
71 else | |
72 DCHECK(supervisor_observer_); | |
73 | |
74 supervisor_observer_ = new_observer; | |
75 } | |
76 | |
77 bool MostVisitedSitesBridge::SupervisorBridge::IsBlocked(const GURL& url) { | |
78 SupervisedUserService* supervised_user_service = | |
79 SupervisedUserServiceFactory::GetForProfile(profile_); | |
80 auto* url_filter = supervised_user_service->GetURLFilterForUIThread(); | |
81 return url_filter->GetFilteringBehaviorForURL(url) == | |
82 SupervisedUserURLFilter::FilteringBehavior::BLOCK; | |
83 } | |
84 | |
85 std::vector<MostVisitedSitesSupervisor::Whitelist> | |
86 MostVisitedSitesBridge::SupervisorBridge::whitelists() { | |
87 std::vector<MostVisitedSitesSupervisor::Whitelist> results; | |
88 SupervisedUserService* supervised_user_service = | |
89 SupervisedUserServiceFactory::GetForProfile(profile_); | |
90 for (const auto& whitelist : supervised_user_service->whitelists()) { | |
91 results.emplace_back(Whitelist{ | |
92 whitelist->title(), whitelist->entry_point(), | |
93 whitelist->large_icon_path(), | |
94 }); | |
95 } | |
96 return results; | |
97 } | |
98 | |
99 bool MostVisitedSitesBridge::SupervisorBridge::IsChildProfile() { | |
100 return profile_->IsChild(); | |
101 } | |
102 | |
103 void MostVisitedSitesBridge::SupervisorBridge::OnURLFilterChanged() { | |
104 if (supervisor_observer_) | |
105 supervisor_observer_->OnBlockedSitesChanged(); | |
106 } | |
107 | 37 |
108 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer { | 38 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer { |
109 public: | 39 public: |
110 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj); | 40 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj); |
111 | 41 |
112 void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override; | 42 void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override; |
113 | 43 |
114 void OnIconMadeAvailable(const GURL& site_url) override; | 44 void OnIconMadeAvailable(const GURL& site_url) override; |
115 | 45 |
116 private: | 46 private: |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 } | 80 } |
151 | 81 |
152 void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable( | 82 void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable( |
153 const GURL& site_url) { | 83 const GURL& site_url) { |
154 JNIEnv* env = AttachCurrentThread(); | 84 JNIEnv* env = AttachCurrentThread(); |
155 Java_MostVisitedURLsObserver_onIconMadeAvailable( | 85 Java_MostVisitedURLsObserver_onIconMadeAvailable( |
156 env, observer_, ConvertUTF8ToJavaString(env, site_url.spec())); | 86 env, observer_, ConvertUTF8ToJavaString(env, site_url.spec())); |
157 } | 87 } |
158 | 88 |
159 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) | 89 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) |
160 : supervisor_(profile), | 90 : most_visited_(ChromeMostVisitedSitesFactory::NewForProfile(profile)) { |
161 most_visited_(profile->GetPrefs(), | |
162 TopSitesFactory::GetForProfile(profile), | |
163 SuggestionsServiceFactory::GetForProfile(profile), | |
164 ChromePopularSites::NewForProfile(profile), | |
165 base::MakeUnique<ntp_tiles::IconCacher>( | |
166 FaviconServiceFactory::GetForProfile( | |
167 profile, | |
168 ServiceAccessType::IMPLICIT_ACCESS), | |
169 base::MakeUnique<image_fetcher::ImageFetcherImpl>( | |
170 base::MakeUnique<suggestions::ImageDecoderImpl>(), | |
171 profile->GetRequestContext())), | |
172 &supervisor_) { | |
173 // Register the thumbnails debugging page. | 91 // Register the thumbnails debugging page. |
174 // TODO(sfiera): find thumbnails a home. They don't belong here. | 92 // TODO(sfiera): find thumbnails a home. They don't belong here. |
175 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); | 93 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); |
176 DCHECK(!profile->IsOffTheRecord()); | 94 DCHECK(!profile->IsOffTheRecord()); |
177 } | 95 } |
178 | 96 |
179 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} | 97 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} |
180 | 98 |
181 void MostVisitedSitesBridge::Destroy( | 99 void MostVisitedSitesBridge::Destroy( |
182 JNIEnv* env, const JavaParamRef<jobject>& obj) { | 100 JNIEnv* env, const JavaParamRef<jobject>& obj) { |
183 delete this; | 101 delete this; |
184 } | 102 } |
185 | 103 |
186 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( | 104 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( |
187 JNIEnv* env, | 105 JNIEnv* env, |
188 const JavaParamRef<jobject>& obj, | 106 const JavaParamRef<jobject>& obj, |
189 const JavaParamRef<jobject>& j_observer, | 107 const JavaParamRef<jobject>& j_observer, |
190 jint num_sites) { | 108 jint num_sites) { |
191 java_observer_.reset(new JavaObserver(env, j_observer)); | 109 java_observer_.reset(new JavaObserver(env, j_observer)); |
192 most_visited_.SetMostVisitedURLsObserver(java_observer_.get(), num_sites); | 110 most_visited_->SetMostVisitedURLsObserver(java_observer_.get(), num_sites); |
193 } | 111 } |
194 | 112 |
195 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl( | 113 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl( |
196 JNIEnv* env, | 114 JNIEnv* env, |
197 const JavaParamRef<jobject>& obj, | 115 const JavaParamRef<jobject>& obj, |
198 const JavaParamRef<jstring>& j_url, | 116 const JavaParamRef<jstring>& j_url, |
199 jboolean add_url) { | 117 jboolean add_url) { |
200 GURL url(ConvertJavaStringToUTF8(env, j_url)); | 118 GURL url(ConvertJavaStringToUTF8(env, j_url)); |
201 most_visited_.AddOrRemoveBlacklistedUrl(url, add_url); | 119 most_visited_->AddOrRemoveBlacklistedUrl(url, add_url); |
202 } | 120 } |
203 | 121 |
204 void MostVisitedSitesBridge::RecordPageImpression( | 122 void MostVisitedSitesBridge::RecordPageImpression( |
205 JNIEnv* env, | 123 JNIEnv* env, |
206 const JavaParamRef<jobject>& obj, | 124 const JavaParamRef<jobject>& obj, |
207 const JavaParamRef<jintArray>& jtile_types, | 125 const JavaParamRef<jintArray>& jtile_types, |
208 const JavaParamRef<jintArray>& jsources, | 126 const JavaParamRef<jintArray>& jsources, |
209 const JavaParamRef<jobjectArray>& jtile_urls) { | 127 const JavaParamRef<jobjectArray>& jtile_urls) { |
210 std::vector<int> int_sources; | 128 std::vector<int> int_sources; |
211 base::android::JavaIntArrayToIntVector(env, jsources, &int_sources); | 129 base::android::JavaIntArrayToIntVector(env, jsources, &int_sources); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 } | 165 } |
248 | 166 |
249 static jlong Init(JNIEnv* env, | 167 static jlong Init(JNIEnv* env, |
250 const JavaParamRef<jobject>& obj, | 168 const JavaParamRef<jobject>& obj, |
251 const JavaParamRef<jobject>& jprofile) { | 169 const JavaParamRef<jobject>& jprofile) { |
252 MostVisitedSitesBridge* most_visited_sites = | 170 MostVisitedSitesBridge* most_visited_sites = |
253 new MostVisitedSitesBridge( | 171 new MostVisitedSitesBridge( |
254 ProfileAndroid::FromProfileAndroid(jprofile)); | 172 ProfileAndroid::FromProfileAndroid(jprofile)); |
255 return reinterpret_cast<intptr_t>(most_visited_sites); | 173 return reinterpret_cast<intptr_t>(most_visited_sites); |
256 } | 174 } |
OLD | NEW |