| 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/android/ntp/popular_sites.h" |
| 16 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
| 17 #include "chrome/browser/history/top_sites_factory.h" | 17 #include "chrome/browser/history/top_sites_factory.h" |
| 18 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 19 #include "chrome/browser/profiles/profile_android.h" | 19 #include "chrome/browser/profiles/profile_android.h" |
| 20 #include "chrome/browser/search/suggestions/suggestions_service_factory.h" | 20 #include "chrome/browser/search/suggestions/suggestions_service_factory.h" |
| 21 #include "chrome/browser/search_engines/template_url_service_factory.h" | 21 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 22 #include "chrome/browser/supervised_user/supervised_user_service.h" |
| 23 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
| 24 #include "chrome/browser/supervised_user/supervised_user_url_filter.h" |
| 22 #include "chrome/browser/thumbnails/thumbnail_list_source.h" | 25 #include "chrome/browser/thumbnails/thumbnail_list_source.h" |
| 23 #include "components/history/core/browser/top_sites.h" | 26 #include "components/history/core/browser/top_sites.h" |
| 24 #include "content/public/browser/url_data_source.h" | 27 #include "content/public/browser/url_data_source.h" |
| 25 #include "jni/MostVisitedSites_jni.h" | 28 #include "jni/MostVisitedSites_jni.h" |
| 26 #include "ui/gfx/android/java_bitmap.h" | 29 #include "ui/gfx/android/java_bitmap.h" |
| 27 #include "url/gurl.h" | 30 #include "url/gurl.h" |
| 28 | 31 |
| 29 using base::android::AttachCurrentThread; | 32 using base::android::AttachCurrentThread; |
| 30 using base::android::ConvertJavaStringToUTF8; | 33 using base::android::ConvertJavaStringToUTF8; |
| 31 using base::android::ScopedJavaGlobalRef; | 34 using base::android::ScopedJavaGlobalRef; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 42 JNIEnv* env = AttachCurrentThread(); | 45 JNIEnv* env = AttachCurrentThread(); |
| 43 ScopedJavaLocalRef<jobject> j_bitmap; | 46 ScopedJavaLocalRef<jobject> j_bitmap; |
| 44 if (bitmap) | 47 if (bitmap) |
| 45 j_bitmap = gfx::ConvertToJavaBitmap(bitmap); | 48 j_bitmap = gfx::ConvertToJavaBitmap(bitmap); |
| 46 Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable( | 49 Java_ThumbnailCallback_onMostVisitedURLsThumbnailAvailable( |
| 47 env, j_callback->obj(), j_bitmap.obj(), is_local_thumbnail); | 50 env, j_callback->obj(), j_bitmap.obj(), is_local_thumbnail); |
| 48 } | 51 } |
| 49 | 52 |
| 50 } // namespace | 53 } // namespace |
| 51 | 54 |
| 52 class MostVisitedSitesBridge::Observer | 55 MostVisitedSitesBridge::SupervisorBridge::SupervisorBridge(Profile* profile) |
| 53 : public MostVisitedSites::Observer { | 56 : profile_(profile), |
| 57 supervisor_observer_(nullptr), |
| 58 register_observer_(this) { |
| 59 register_observer_.Add(SupervisedUserServiceFactory::GetForProfile(profile_)); |
| 60 } |
| 61 |
| 62 MostVisitedSitesBridge::SupervisorBridge::~SupervisorBridge() {} |
| 63 |
| 64 void MostVisitedSitesBridge::SupervisorBridge::SetObserver( |
| 65 Observer* new_observer) { |
| 66 if (new_observer) |
| 67 DCHECK(!supervisor_observer_); |
| 68 else |
| 69 DCHECK(supervisor_observer_); |
| 70 |
| 71 supervisor_observer_ = new_observer; |
| 72 } |
| 73 |
| 74 bool MostVisitedSitesBridge::SupervisorBridge::IsBlocked(const GURL& url) { |
| 75 SupervisedUserService* supervised_user_service = |
| 76 SupervisedUserServiceFactory::GetForProfile(profile_); |
| 77 auto url_filter = supervised_user_service->GetURLFilterForUIThread(); |
| 78 return url_filter->GetFilteringBehaviorForURL(url) == |
| 79 SupervisedUserURLFilter::FilteringBehavior::BLOCK; |
| 80 } |
| 81 |
| 82 std::vector<MostVisitedSitesSupervisor::Whitelist> |
| 83 MostVisitedSitesBridge::SupervisorBridge::whitelists() { |
| 84 std::vector<MostVisitedSitesSupervisor::Whitelist> results; |
| 85 SupervisedUserService* supervised_user_service = |
| 86 SupervisedUserServiceFactory::GetForProfile(profile_); |
| 87 for (const auto& whitelist : supervised_user_service->whitelists()) { |
| 88 results.emplace_back(Whitelist{ |
| 89 whitelist->title(), whitelist->entry_point(), |
| 90 whitelist->large_icon_path(), |
| 91 }); |
| 92 } |
| 93 return results; |
| 94 } |
| 95 |
| 96 bool MostVisitedSitesBridge::SupervisorBridge::IsChildProfile() { |
| 97 return profile_->IsChild(); |
| 98 } |
| 99 |
| 100 void MostVisitedSitesBridge::SupervisorBridge::OnURLFilterChanged() { |
| 101 if (supervisor_observer_) |
| 102 supervisor_observer_->OnBlockedSitesChanged(); |
| 103 } |
| 104 |
| 105 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer { |
| 54 public: | 106 public: |
| 55 Observer(JNIEnv* env, const JavaParamRef<jobject>& obj); | 107 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj); |
| 56 | 108 |
| 57 void OnMostVisitedURLsAvailable( | 109 void OnMostVisitedURLsAvailable( |
| 58 const MostVisitedSites::SuggestionsVector& suggestions) override; | 110 const MostVisitedSites::SuggestionsVector& suggestions) override; |
| 59 | 111 |
| 60 void OnPopularURLsAvailable( | 112 void OnPopularURLsAvailable( |
| 61 const MostVisitedSites::PopularSitesVector& sites) override; | 113 const MostVisitedSites::PopularSitesVector& sites) override; |
| 62 | 114 |
| 63 private: | 115 private: |
| 64 ScopedJavaGlobalRef<jobject> observer_; | 116 ScopedJavaGlobalRef<jobject> observer_; |
| 65 | 117 |
| 66 DISALLOW_COPY_AND_ASSIGN(Observer); | 118 DISALLOW_COPY_AND_ASSIGN(JavaObserver); |
| 67 }; | 119 }; |
| 68 | 120 |
| 69 MostVisitedSitesBridge::Observer::Observer( | 121 MostVisitedSitesBridge::JavaObserver::JavaObserver( |
| 70 JNIEnv* env, const JavaParamRef<jobject>& obj) | 122 JNIEnv* env, |
| 123 const JavaParamRef<jobject>& obj) |
| 71 : observer_(env, obj) {} | 124 : observer_(env, obj) {} |
| 72 | 125 |
| 73 void MostVisitedSitesBridge::Observer::OnMostVisitedURLsAvailable( | 126 void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable( |
| 74 const MostVisitedSites::SuggestionsVector& suggestions) { | 127 const MostVisitedSites::SuggestionsVector& suggestions) { |
| 75 JNIEnv* env = AttachCurrentThread(); | 128 JNIEnv* env = AttachCurrentThread(); |
| 76 std::vector<base::string16> titles; | 129 std::vector<base::string16> titles; |
| 77 std::vector<std::string> urls; | 130 std::vector<std::string> urls; |
| 78 std::vector<std::string> whitelist_icon_paths; | 131 std::vector<std::string> whitelist_icon_paths; |
| 79 titles.reserve(suggestions.size()); | 132 titles.reserve(suggestions.size()); |
| 80 urls.reserve(suggestions.size()); | 133 urls.reserve(suggestions.size()); |
| 81 whitelist_icon_paths.reserve(suggestions.size()); | 134 whitelist_icon_paths.reserve(suggestions.size()); |
| 82 for (const auto& suggestion : suggestions) { | 135 for (const auto& suggestion : suggestions) { |
| 83 titles.emplace_back(suggestion.title); | 136 titles.emplace_back(suggestion.title); |
| 84 urls.emplace_back(suggestion.url.spec()); | 137 urls.emplace_back(suggestion.url.spec()); |
| 85 whitelist_icon_paths.emplace_back(suggestion.whitelist_icon_path.value()); | 138 whitelist_icon_paths.emplace_back(suggestion.whitelist_icon_path.value()); |
| 86 } | 139 } |
| 87 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( | 140 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( |
| 88 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), | 141 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), |
| 89 ToJavaArrayOfStrings(env, urls).obj(), | 142 ToJavaArrayOfStrings(env, urls).obj(), |
| 90 ToJavaArrayOfStrings(env, whitelist_icon_paths).obj()); | 143 ToJavaArrayOfStrings(env, whitelist_icon_paths).obj()); |
| 91 } | 144 } |
| 92 | 145 |
| 93 void MostVisitedSitesBridge::Observer::OnPopularURLsAvailable( | 146 void MostVisitedSitesBridge::JavaObserver::OnPopularURLsAvailable( |
| 94 const MostVisitedSites::PopularSitesVector& sites) { | 147 const MostVisitedSites::PopularSitesVector& sites) { |
| 95 JNIEnv* env = AttachCurrentThread(); | 148 JNIEnv* env = AttachCurrentThread(); |
| 96 std::vector<std::string> urls; | 149 std::vector<std::string> urls; |
| 97 std::vector<std::string> favicon_urls; | 150 std::vector<std::string> favicon_urls; |
| 98 std::vector<std::string> large_icon_urls; | 151 std::vector<std::string> large_icon_urls; |
| 99 for (const auto& site : sites) { | 152 for (const auto& site : sites) { |
| 100 urls.emplace_back(site.url.spec()); | 153 urls.emplace_back(site.url.spec()); |
| 101 favicon_urls.emplace_back(site.favicon_url.spec()); | 154 favicon_urls.emplace_back(site.favicon_url.spec()); |
| 102 large_icon_urls.emplace_back(site.large_icon_url.spec()); | 155 large_icon_urls.emplace_back(site.large_icon_url.spec()); |
| 103 } | 156 } |
| 104 Java_MostVisitedURLsObserver_onPopularURLsAvailable( | 157 Java_MostVisitedURLsObserver_onPopularURLsAvailable( |
| 105 env, observer_.obj(), ToJavaArrayOfStrings(env, urls).obj(), | 158 env, observer_.obj(), ToJavaArrayOfStrings(env, urls).obj(), |
| 106 ToJavaArrayOfStrings(env, favicon_urls).obj(), | 159 ToJavaArrayOfStrings(env, favicon_urls).obj(), |
| 107 ToJavaArrayOfStrings(env, large_icon_urls).obj()); | 160 ToJavaArrayOfStrings(env, large_icon_urls).obj()); |
| 108 } | 161 } |
| 109 | 162 |
| 110 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) | 163 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) |
| 111 : most_visited_(profile->GetPrefs(), | 164 : supervisor_(profile), |
| 165 most_visited_(profile->GetPrefs(), |
| 112 TemplateURLServiceFactory::GetForProfile(profile), | 166 TemplateURLServiceFactory::GetForProfile(profile), |
| 113 g_browser_process->variations_service(), | 167 g_browser_process->variations_service(), |
| 114 profile->GetRequestContext(), | 168 profile->GetRequestContext(), |
| 115 ChromePopularSites::GetDirectory(), | 169 ChromePopularSites::GetDirectory(), |
| 116 TopSitesFactory::GetForProfile(profile), | 170 TopSitesFactory::GetForProfile(profile), |
| 117 SuggestionsServiceFactory::GetForProfile(profile), | 171 SuggestionsServiceFactory::GetForProfile(profile), |
| 118 profile->IsChild(), | 172 &supervisor_) { |
| 119 profile) { | |
| 120 // Register the thumbnails debugging page. | 173 // Register the thumbnails debugging page. |
| 121 // TODO(sfiera): find thumbnails a home. They don't belong here. | 174 // TODO(sfiera): find thumbnails a home. They don't belong here. |
| 122 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); | 175 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); |
| 123 } | 176 } |
| 124 | 177 |
| 125 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} | 178 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} |
| 126 | 179 |
| 127 void MostVisitedSitesBridge::Destroy( | 180 void MostVisitedSitesBridge::Destroy( |
| 128 JNIEnv* env, const JavaParamRef<jobject>& obj) { | 181 JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 129 delete this; | 182 delete this; |
| 130 } | 183 } |
| 131 | 184 |
| 132 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( | 185 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( |
| 133 JNIEnv* env, | 186 JNIEnv* env, |
| 134 const JavaParamRef<jobject>& obj, | 187 const JavaParamRef<jobject>& obj, |
| 135 const JavaParamRef<jobject>& j_observer, | 188 const JavaParamRef<jobject>& j_observer, |
| 136 jint num_sites) { | 189 jint num_sites) { |
| 137 observer_.reset(new Observer(env, j_observer)); | 190 java_observer_.reset(new JavaObserver(env, j_observer)); |
| 138 most_visited_.SetMostVisitedURLsObserver(observer_.get(), num_sites); | 191 most_visited_.SetMostVisitedURLsObserver(java_observer_.get(), num_sites); |
| 139 } | 192 } |
| 140 | 193 |
| 141 void MostVisitedSitesBridge::GetURLThumbnail( | 194 void MostVisitedSitesBridge::GetURLThumbnail( |
| 142 JNIEnv* env, | 195 JNIEnv* env, |
| 143 const JavaParamRef<jobject>& obj, | 196 const JavaParamRef<jobject>& obj, |
| 144 const JavaParamRef<jstring>& j_url, | 197 const JavaParamRef<jstring>& j_url, |
| 145 const JavaParamRef<jobject>& j_callback_obj) { | 198 const JavaParamRef<jobject>& j_callback_obj) { |
| 146 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback( | 199 std::unique_ptr<ScopedJavaGlobalRef<jobject>> j_callback( |
| 147 new ScopedJavaGlobalRef<jobject>(env, j_callback_obj)); | 200 new ScopedJavaGlobalRef<jobject>(env, j_callback_obj)); |
| 148 auto callback = base::Bind(&CallJavaWithBitmap, base::Passed(&j_callback)); | 201 auto callback = base::Bind(&CallJavaWithBitmap, base::Passed(&j_callback)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 235 } |
| 183 | 236 |
| 184 static jlong Init(JNIEnv* env, | 237 static jlong Init(JNIEnv* env, |
| 185 const JavaParamRef<jobject>& obj, | 238 const JavaParamRef<jobject>& obj, |
| 186 const JavaParamRef<jobject>& jprofile) { | 239 const JavaParamRef<jobject>& jprofile) { |
| 187 MostVisitedSitesBridge* most_visited_sites = | 240 MostVisitedSitesBridge* most_visited_sites = |
| 188 new MostVisitedSitesBridge( | 241 new MostVisitedSitesBridge( |
| 189 ProfileAndroid::FromProfileAndroid(jprofile)); | 242 ProfileAndroid::FromProfileAndroid(jprofile)); |
| 190 return reinterpret_cast<intptr_t>(most_visited_sites); | 243 return reinterpret_cast<intptr_t>(most_visited_sites); |
| 191 } | 244 } |
| OLD | NEW |