Chromium Code Reviews| 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" |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 using base::android::ToJavaArrayOfStrings; | 30 using base::android::ToJavaArrayOfStrings; |
| 31 using base::android::ToJavaIntArray; | 31 using base::android::ToJavaIntArray; |
| 32 using ntp_tiles::MostVisitedSites; | 32 using ntp_tiles::MostVisitedSites; |
| 33 using ntp_tiles::NTPTileSource; | 33 using ntp_tiles::NTPTileSource; |
| 34 using ntp_tiles::NTPTilesVector; | 34 using ntp_tiles::NTPTilesVector; |
| 35 using ntp_tiles::metrics::MostVisitedTileType; | 35 using ntp_tiles::metrics::MostVisitedTileType; |
| 36 using ntp_tiles::metrics::TileImpression; | 36 using ntp_tiles::metrics::TileImpression; |
| 37 | 37 |
| 38 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer { | 38 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer { |
| 39 public: | 39 public: |
| 40 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj); | 40 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj, int num_sites); |
| 41 | 41 |
| 42 void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override; | 42 void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override; |
| 43 | 43 |
| 44 void OnIconMadeAvailable(const GURL& site_url) override; | 44 void OnIconMadeAvailable(const GURL& site_url) override; |
| 45 | 45 |
| 46 private: | 46 private: |
| 47 ScopedJavaGlobalRef<jobject> observer_; | 47 ScopedJavaGlobalRef<jobject> observer_; |
| 48 const int num_sites_; | |
| 48 | 49 |
| 49 DISALLOW_COPY_AND_ASSIGN(JavaObserver); | 50 DISALLOW_COPY_AND_ASSIGN(JavaObserver); |
| 50 }; | 51 }; |
| 51 | 52 |
| 52 MostVisitedSitesBridge::JavaObserver::JavaObserver( | 53 MostVisitedSitesBridge::JavaObserver::JavaObserver( |
| 53 JNIEnv* env, | 54 JNIEnv* env, |
| 54 const JavaParamRef<jobject>& obj) | 55 const JavaParamRef<jobject>& obj, |
| 55 : observer_(env, obj) {} | 56 int num_sites) |
| 57 : observer_(env, obj), num_sites_(num_sites) {} | |
| 56 | 58 |
| 57 void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable( | 59 void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable( |
| 58 const NTPTilesVector& tiles) { | 60 const NTPTilesVector& tiles) { |
| 59 JNIEnv* env = AttachCurrentThread(); | 61 JNIEnv* env = AttachCurrentThread(); |
| 60 std::vector<base::string16> titles; | 62 std::vector<base::string16> titles; |
| 61 std::vector<std::string> urls; | 63 std::vector<std::string> urls; |
| 62 std::vector<std::string> whitelist_icon_paths; | 64 std::vector<std::string> whitelist_icon_paths; |
| 63 std::vector<int> sources; | 65 std::vector<int> sources; |
| 64 | 66 |
| 65 titles.reserve(tiles.size()); | 67 titles.reserve(tiles.size()); |
| 66 urls.reserve(tiles.size()); | 68 urls.reserve(tiles.size()); |
| 67 whitelist_icon_paths.reserve(tiles.size()); | 69 whitelist_icon_paths.reserve(tiles.size()); |
| 68 sources.reserve(tiles.size()); | 70 sources.reserve(tiles.size()); |
| 69 for (const auto& tile : tiles) { | 71 for (const auto& tile : tiles) { |
| 72 if (static_cast<int>(titles.size()) >= num_sites_) | |
| 73 break; | |
| 70 titles.emplace_back(tile.title); | 74 titles.emplace_back(tile.title); |
| 71 urls.emplace_back(tile.url.spec()); | 75 urls.emplace_back(tile.url.spec()); |
| 72 whitelist_icon_paths.emplace_back(tile.whitelist_icon_path.value()); | 76 whitelist_icon_paths.emplace_back(tile.whitelist_icon_path.value()); |
| 73 sources.emplace_back(static_cast<int>(tile.source)); | 77 sources.emplace_back(static_cast<int>(tile.source)); |
| 74 } | 78 } |
| 75 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( | 79 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( |
| 76 env, observer_, ToJavaArrayOfStrings(env, titles), | 80 env, observer_, ToJavaArrayOfStrings(env, titles), |
| 77 ToJavaArrayOfStrings(env, urls), | 81 ToJavaArrayOfStrings(env, urls), |
| 78 ToJavaArrayOfStrings(env, whitelist_icon_paths), | 82 ToJavaArrayOfStrings(env, whitelist_icon_paths), |
| 79 ToJavaIntArray(env, sources)); | 83 ToJavaIntArray(env, sources)); |
| 80 } | 84 } |
| 81 | 85 |
| 82 void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable( | 86 void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable( |
| 83 const GURL& site_url) { | 87 const GURL& site_url) { |
| 88 // Note that this implementation doesn't honor num_sites_, so client code is | |
| 89 // expected to handle well the case where the URL doesn't match any known URL. | |
| 84 JNIEnv* env = AttachCurrentThread(); | 90 JNIEnv* env = AttachCurrentThread(); |
| 85 Java_MostVisitedURLsObserver_onIconMadeAvailable( | 91 Java_MostVisitedURLsObserver_onIconMadeAvailable( |
| 86 env, observer_, ConvertUTF8ToJavaString(env, site_url.spec())); | 92 env, observer_, ConvertUTF8ToJavaString(env, site_url.spec())); |
| 87 } | 93 } |
| 88 | 94 |
| 89 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) | 95 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) |
| 90 : most_visited_(ChromeMostVisitedSitesFactory::NewForProfile(profile)) { | 96 : most_visited_(ChromeMostVisitedSitesFactory::NewForProfile(profile)) { |
| 91 // Register the thumbnails debugging page. | 97 // Register the thumbnails debugging page. |
| 92 // TODO(sfiera): find thumbnails a home. They don't belong here. | 98 // TODO(sfiera): find thumbnails a home. They don't belong here. |
| 93 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); | 99 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); |
| 94 DCHECK(!profile->IsOffTheRecord()); | 100 DCHECK(!profile->IsOffTheRecord()); |
| 95 } | 101 } |
| 96 | 102 |
| 97 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} | 103 MostVisitedSitesBridge::~MostVisitedSitesBridge() { |
| 104 if (java_observer_) | |
| 105 most_visited_->RemoveObserver(java_observer_.get()); | |
| 106 } | |
| 98 | 107 |
| 99 void MostVisitedSitesBridge::Destroy( | 108 void MostVisitedSitesBridge::Destroy( |
| 100 JNIEnv* env, const JavaParamRef<jobject>& obj) { | 109 JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 101 delete this; | 110 delete this; |
| 102 } | 111 } |
| 103 | 112 |
| 104 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( | 113 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( |
| 105 JNIEnv* env, | 114 JNIEnv* env, |
| 106 const JavaParamRef<jobject>& obj, | 115 const JavaParamRef<jobject>& obj, |
| 107 const JavaParamRef<jobject>& j_observer, | 116 const JavaParamRef<jobject>& j_observer, |
| 108 jint num_sites) { | 117 jint num_sites) { |
| 109 java_observer_.reset(new JavaObserver(env, j_observer)); | 118 if (java_observer_) |
| 110 most_visited_->SetMostVisitedURLsObserver(java_observer_.get(), num_sites); | 119 most_visited_->RemoveObserver(java_observer_.get()); |
| 120 | |
| 121 java_observer_.reset(new JavaObserver(env, j_observer, num_sites)); | |
|
sfiera
2017/01/18 09:58:33
Can we change JavaObserver to call {Add,Remove}Obs
| |
| 122 most_visited_->AddObserver(java_observer_.get()); | |
| 123 most_visited_->Refresh(); | |
| 111 } | 124 } |
| 112 | 125 |
| 113 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl( | 126 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl( |
| 114 JNIEnv* env, | 127 JNIEnv* env, |
| 115 const JavaParamRef<jobject>& obj, | 128 const JavaParamRef<jobject>& obj, |
| 116 const JavaParamRef<jstring>& j_url, | 129 const JavaParamRef<jstring>& j_url, |
| 117 jboolean add_url) { | 130 jboolean add_url) { |
| 118 GURL url(ConvertJavaStringToUTF8(env, j_url)); | 131 GURL url(ConvertJavaStringToUTF8(env, j_url)); |
| 119 most_visited_->AddOrRemoveBlacklistedUrl(url, add_url); | 132 most_visited_->AddOrRemoveBlacklistedUrl(url, add_url); |
| 120 } | 133 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 165 } | 178 } |
| 166 | 179 |
| 167 static jlong Init(JNIEnv* env, | 180 static jlong Init(JNIEnv* env, |
| 168 const JavaParamRef<jobject>& obj, | 181 const JavaParamRef<jobject>& obj, |
| 169 const JavaParamRef<jobject>& jprofile) { | 182 const JavaParamRef<jobject>& jprofile) { |
| 170 MostVisitedSitesBridge* most_visited_sites = | 183 MostVisitedSitesBridge* most_visited_sites = |
| 171 new MostVisitedSitesBridge( | 184 new MostVisitedSitesBridge( |
| 172 ProfileAndroid::FromProfileAndroid(jprofile)); | 185 ProfileAndroid::FromProfileAndroid(jprofile)); |
| 173 return reinterpret_cast<intptr_t>(most_visited_sites); | 186 return reinterpret_cast<intptr_t>(most_visited_sites); |
| 174 } | 187 } |
| OLD | NEW |