| 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 |