Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(681)

Side by Side Diff: chrome/browser/android/most_visited_sites.cc

Issue 1030713002: [Suggestions] Remove support for a Control logging group. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: clean up one more test Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/most_visited_sites.h" 5 #include "chrome/browser/android/most_visited_sites.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 // Total number of tiles displayed. 55 // Total number of tiles displayed.
56 const char kNumTilesHistogramName[] = "NewTabPage.NumberOfTiles"; 56 const char kNumTilesHistogramName[] = "NewTabPage.NumberOfTiles";
57 // Tracking thumbnails. 57 // Tracking thumbnails.
58 const char kNumLocalThumbnailTilesHistogramName[] = 58 const char kNumLocalThumbnailTilesHistogramName[] =
59 "NewTabPage.NumberOfThumbnailTiles"; 59 "NewTabPage.NumberOfThumbnailTiles";
60 const char kNumEmptyTilesHistogramName[] = "NewTabPage.NumberOfGrayTiles"; 60 const char kNumEmptyTilesHistogramName[] = "NewTabPage.NumberOfGrayTiles";
61 const char kNumServerTilesHistogramName[] = "NewTabPage.NumberOfExternalTiles"; 61 const char kNumServerTilesHistogramName[] = "NewTabPage.NumberOfExternalTiles";
62 // Client suggestion opened. 62 // Client suggestion opened.
63 const char kOpenedItemClientHistogramName[] = "NewTabPage.MostVisited.client"; 63 const char kOpenedItemClientHistogramName[] = "NewTabPage.MostVisited.client";
64 // Control group suggestion opened.
65 const char kOpenedItemControlHistogramName[] = "NewTabPage.MostVisited.client0";
66 // Server suggestion opened, no provider. 64 // Server suggestion opened, no provider.
67 const char kOpenedItemServerHistogramName[] = "NewTabPage.MostVisited.server"; 65 const char kOpenedItemServerHistogramName[] = "NewTabPage.MostVisited.server";
68 // Server suggestion opened with provider. 66 // Server suggestion opened with provider.
69 const char kOpenedItemServerProviderHistogramFormat[] = 67 const char kOpenedItemServerProviderHistogramFormat[] =
70 "NewTabPage.MostVisited.server%d"; 68 "NewTabPage.MostVisited.server%d";
71 // Client impression. 69 // Client impression.
72 const char kImpressionClientHistogramName[] = 70 const char kImpressionClientHistogramName[] =
73 "NewTabPage.SuggestionsImpression.client"; 71 "NewTabPage.SuggestionsImpression.client";
74 // Control group impression.
75 const char kImpressionControlHistogramName[] =
76 "NewTabPage.SuggestionsImpression.client0";
77 // Server suggestion impression, no provider. 72 // Server suggestion impression, no provider.
78 const char kImpressionServerHistogramName[] = 73 const char kImpressionServerHistogramName[] =
79 "NewTabPage.SuggestionsImpression.server"; 74 "NewTabPage.SuggestionsImpression.server";
80 // Server suggestion impression with provider. 75 // Server suggestion impression with provider.
81 const char kImpressionServerHistogramFormat[] = 76 const char kImpressionServerHistogramFormat[] =
82 "NewTabPage.SuggestionsImpression.server%d"; 77 "NewTabPage.SuggestionsImpression.server%d";
83 78
84 void ExtractMostVisitedTitlesAndURLs( 79 void ExtractMostVisitedTitlesAndURLs(
85 const history::MostVisitedURLList& visited_list, 80 const history::MostVisitedURLList& visited_list,
86 std::vector<base::string16>* titles, 81 std::vector<base::string16>* titles,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 return SyncState::SYNC_OR_HISTORY_SYNC_DISABLED; 177 return SyncState::SYNC_OR_HISTORY_SYNC_DISABLED;
183 return suggestions::GetSyncState( 178 return suggestions::GetSyncState(
184 sync->IsSyncEnabledAndLoggedIn(), 179 sync->IsSyncEnabledAndLoggedIn(),
185 sync->SyncActive() && sync->ConfigurationDone(), 180 sync->SyncActive() && sync->ConfigurationDone(),
186 sync->GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES)); 181 sync->GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES));
187 } 182 }
188 183
189 } // namespace 184 } // namespace
190 185
191 MostVisitedSites::MostVisitedSites(Profile* profile) 186 MostVisitedSites::MostVisitedSites(Profile* profile)
192 : profile_(profile), num_sites_(0), is_control_group_(false), 187 : profile_(profile), num_sites_(0), initial_load_done_(false),
193 initial_load_done_(false), num_local_thumbs_(0), num_server_thumbs_(0), 188 num_local_thumbs_(0), num_server_thumbs_(0), num_empty_thumbs_(0),
194 num_empty_thumbs_(0), scoped_observer_(this), weak_ptr_factory_(this) { 189 scoped_observer_(this), weak_ptr_factory_(this) {
195 // Register the debugging page for the Suggestions Service and the thumbnails 190 // Register the debugging page for the Suggestions Service and the thumbnails
196 // debugging page. 191 // debugging page.
197 content::URLDataSource::Add(profile_, 192 content::URLDataSource::Add(profile_,
198 new suggestions::SuggestionsSource(profile_)); 193 new suggestions::SuggestionsSource(profile_));
199 content::URLDataSource::Add(profile_, new ThumbnailListSource(profile_)); 194 content::URLDataSource::Add(profile_, new ThumbnailListSource(profile_));
200 195
201 // Register this class as an observer to the sync service. It is important to 196 // Register this class as an observer to the sync service. It is important to
202 // be notified of changes in the sync state such as initialization, sync 197 // be notified of changes in the sync state such as initialization, sync
203 // being enabled or disabled, etc. 198 // being enabled or disabled, etc.
204 ProfileSyncService* profile_sync_service = 199 ProfileSyncService* profile_sync_service =
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 break; 304 break;
310 } 305 }
311 } 306 }
312 } 307 }
313 308
314 void MostVisitedSites::RecordOpenedMostVisitedItem(JNIEnv* env, 309 void MostVisitedSites::RecordOpenedMostVisitedItem(JNIEnv* env,
315 jobject obj, 310 jobject obj,
316 jint index) { 311 jint index) {
317 switch (mv_source_) { 312 switch (mv_source_) {
318 case TOP_SITES: { 313 case TOP_SITES: {
319 const std::string histogram = is_control_group_ ? 314 UMA_HISTOGRAM_SPARSE_SLOWLY(kOpenedItemClientHistogramName, index);
320 kOpenedItemControlHistogramName : kOpenedItemClientHistogramName;
321 LogHistogramEvent(histogram, index, num_sites_);
322 break; 315 break;
323 } 316 }
324 case SUGGESTIONS_SERVICE: { 317 case SUGGESTIONS_SERVICE: {
325 if (server_suggestions_.suggestions_size() > index) { 318 if (server_suggestions_.suggestions_size() > index) {
326 if (server_suggestions_.suggestions(index).providers_size()) { 319 if (server_suggestions_.suggestions(index).providers_size()) {
327 std::string histogram = base::StringPrintf( 320 std::string histogram = base::StringPrintf(
328 kOpenedItemServerProviderHistogramFormat, 321 kOpenedItemServerProviderHistogramFormat,
329 server_suggestions_.suggestions(index).providers(0)); 322 server_suggestions_.suggestions(index).providers(0));
330 LogHistogramEvent(histogram, index, num_sites_); 323 LogHistogramEvent(histogram, index, num_sites_);
331 } else { 324 } else {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 std::vector<base::string16> titles; 379 std::vector<base::string16> titles;
387 std::vector<std::string> urls; 380 std::vector<std::string> urls;
388 ExtractMostVisitedTitlesAndURLs(visited_list, &titles, &urls, num_sites); 381 ExtractMostVisitedTitlesAndURLs(visited_list, &titles, &urls, num_sites);
389 382
390 mv_source_ = TOP_SITES; 383 mv_source_ = TOP_SITES;
391 384
392 // Only log impression metrics on the initial load of the NTP. 385 // Only log impression metrics on the initial load of the NTP.
393 if (!initial_load_done_) { 386 if (!initial_load_done_) {
394 int num_tiles = urls.size(); 387 int num_tiles = urls.size();
395 UMA_HISTOGRAM_SPARSE_SLOWLY(kNumTilesHistogramName, num_tiles); 388 UMA_HISTOGRAM_SPARSE_SLOWLY(kNumTilesHistogramName, num_tiles);
396 const std::string histogram = is_control_group_ ?
397 kImpressionControlHistogramName : kImpressionClientHistogramName;
398 for (int i = 0; i < num_tiles; ++i) { 389 for (int i = 0; i < num_tiles; ++i) {
399 LogHistogramEvent(histogram, i, num_sites_); 390 UMA_HISTOGRAM_SPARSE_SLOWLY(kImpressionClientHistogramName, i);
400 } 391 }
401 } 392 }
402 initial_load_done_ = true; 393 initial_load_done_ = true;
403 394
404 JNIEnv* env = AttachCurrentThread(); 395 JNIEnv* env = AttachCurrentThread();
405 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( 396 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
406 env, 397 env,
407 j_observer->obj(), 398 j_observer->obj(),
408 ToJavaArrayOfStrings(env, titles).obj(), 399 ToJavaArrayOfStrings(env, titles).obj(),
409 ToJavaArrayOfStrings(env, urls).obj()); 400 ToJavaArrayOfStrings(env, urls).obj());
410 } 401 }
411 402
412 void MostVisitedSites::OnSuggestionsProfileAvailable( 403 void MostVisitedSites::OnSuggestionsProfileAvailable(
413 ScopedJavaGlobalRef<jobject>* j_observer, 404 ScopedJavaGlobalRef<jobject>* j_observer,
414 const SuggestionsProfile& suggestions_profile) { 405 const SuggestionsProfile& suggestions_profile) {
415 int size = suggestions_profile.suggestions_size();
416
417 // Determine if the user is in a control group (they would have received
418 // suggestions, but are in a group where they shouldn't).
419 is_control_group_ = size && SuggestionsService::IsControlGroup();
420
421 // If no suggestions data is available or the user is in a control group,
422 // initiate Top Sites query.
423 if (is_control_group_ || !size) {
424 InitiateTopSitesQuery();
425 return;
426 }
427
428 std::vector<base::string16> titles; 406 std::vector<base::string16> titles;
huangs 2015/03/24 15:17:26 So if size == 0 you no longer need to call Initiat
Mathieu 2015/03/24 15:26:16 Done. Gosh, I feel so silly :\
429 std::vector<std::string> urls; 407 std::vector<std::string> urls;
430
431 int i = 0; 408 int i = 0;
432 for (; i < size && i < num_sites_; ++i) { 409 for (; i < suggestions_profile.suggestions_size() && i < num_sites_; ++i) {
433 const ChromeSuggestion& suggestion = suggestions_profile.suggestions(i); 410 const ChromeSuggestion& suggestion = suggestions_profile.suggestions(i);
434 titles.push_back(base::UTF8ToUTF16(suggestion.title())); 411 titles.push_back(base::UTF8ToUTF16(suggestion.title()));
435 urls.push_back(suggestion.url()); 412 urls.push_back(suggestion.url());
436 // Only log impression metrics on the initial NTP load. 413 // Only log impression metrics on the initial NTP load.
437 if (!initial_load_done_) { 414 if (!initial_load_done_) {
438 if (suggestion.providers_size()) { 415 if (suggestion.providers_size()) {
439 std::string histogram = base::StringPrintf( 416 std::string histogram = base::StringPrintf(
440 kImpressionServerHistogramFormat, suggestion.providers(0)); 417 kImpressionServerHistogramFormat, suggestion.providers(0));
441 LogHistogramEvent(histogram, i, num_sites_); 418 LogHistogramEvent(histogram, i, num_sites_);
442 } else { 419 } else {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 // The displayed suggestions are invalidated. 503 // The displayed suggestions are invalidated.
527 QueryMostVisitedURLs(); 504 QueryMostVisitedURLs();
528 } 505 }
529 } 506 }
530 507
531 static jlong Init(JNIEnv* env, jobject obj, jobject jprofile) { 508 static jlong Init(JNIEnv* env, jobject obj, jobject jprofile) {
532 MostVisitedSites* most_visited_sites = 509 MostVisitedSites* most_visited_sites =
533 new MostVisitedSites(ProfileAndroid::FromProfileAndroid(jprofile)); 510 new MostVisitedSites(ProfileAndroid::FromProfileAndroid(jprofile));
534 return reinterpret_cast<intptr_t>(most_visited_sites); 511 return reinterpret_cast<intptr_t>(most_visited_sites);
535 } 512 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698