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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java

Issue 2338703003: [NTP] Fix article suggestion clicks contributing to Most Visited tiles (Closed)
Patch Set: Add test coverage to HistoryBackend. Created 4 years, 3 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
« no previous file with comments | « no previous file | components/history/core/browser/history_backend.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 package org.chromium.chrome.browser.ntp; 5 package org.chromium.chrome.browser.ntp;
6 6
7 import android.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.content.Context; 8 import android.content.Context;
9 import android.graphics.Canvas; 9 import android.graphics.Canvas;
10 import android.graphics.Point; 10 import android.graphics.Point;
(...skipping 27 matching lines...) Expand all
38 import org.chromium.chrome.browser.favicon.FaviconHelper; 38 import org.chromium.chrome.browser.favicon.FaviconHelper;
39 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback; 39 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
40 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac k; 40 import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallbac k;
41 import org.chromium.chrome.browser.favicon.LargeIconBridge; 41 import org.chromium.chrome.browser.favicon.LargeIconBridge;
42 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; 42 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
43 import org.chromium.chrome.browser.metrics.StartupMetrics; 43 import org.chromium.chrome.browser.metrics.StartupMetrics;
44 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; 44 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
45 import org.chromium.chrome.browser.ntp.LogoBridge.Logo; 45 import org.chromium.chrome.browser.ntp.LogoBridge.Logo;
46 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver; 46 import org.chromium.chrome.browser.ntp.LogoBridge.LogoObserver;
47 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; 47 import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
48 import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
48 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle; 49 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
49 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge; 50 import org.chromium.chrome.browser.ntp.snippets.SnippetsBridge;
50 import org.chromium.chrome.browser.ntp.snippets.SnippetsConfig; 51 import org.chromium.chrome.browser.ntp.snippets.SnippetsConfig;
51 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge; 52 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
52 import org.chromium.chrome.browser.preferences.PrefServiceBridge; 53 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
53 import org.chromium.chrome.browser.profiles.MostVisitedSites; 54 import org.chromium.chrome.browser.profiles.MostVisitedSites;
54 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse rver; 55 import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObse rver;
55 import org.chromium.chrome.browser.profiles.Profile; 56 import org.chromium.chrome.browser.profiles.Profile;
56 import org.chromium.chrome.browser.search_engines.TemplateUrlService; 57 import org.chromium.chrome.browser.search_engines.TemplateUrlService;
57 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl ServiceObserver; 58 import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl ServiceObserver;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 mMostVisitedSites.recordOpenedMostVisitedItem( 233 mMostVisitedSites.recordOpenedMostVisitedItem(
233 item.getIndex(), item.getTileType(), item.getSource()); 234 item.getIndex(), item.getTileType(), item.getSource());
234 } 235 }
235 236
236 @Override 237 @Override
237 public void openMostVisitedItem(MostVisitedItem item) { 238 public void openMostVisitedItem(MostVisitedItem item) {
238 if (mIsDestroyed) return; 239 if (mIsDestroyed) return;
239 recordOpenedMostVisitedItem(item); 240 recordOpenedMostVisitedItem(item);
240 String url = item.getUrl(); 241 String url = item.getUrl();
241 if (!switchToExistingTab(url)) { 242 if (!switchToExistingTab(url)) {
242 openUrl(WindowOpenDisposition.CURRENT_TAB, url); 243 openUrlMostVisited(WindowOpenDisposition.CURRENT_TAB, url);
243 } 244 }
244 } 245 }
245 246
246 @Override 247 @Override
247 public void onLearnMoreClicked() { 248 public void onLearnMoreClicked() {
248 if (mIsDestroyed) return; 249 if (mIsDestroyed) return;
249 NewTabPageUma.recordAction(NewTabPageUma.ACTION_CLICKED_LEARN_MORE); 250 NewTabPageUma.recordAction(NewTabPageUma.ACTION_CLICKED_LEARN_MORE);
250 String url = "https://support.google.com/chrome/?p=new_tab"; 251 String url = "https://support.google.com/chrome/?p=new_tab";
251 openUrl(WindowOpenDisposition.CURRENT_TAB, url); 252 // TODO(mastiz): Change this to LINK?
253 openUrl(WindowOpenDisposition.CURRENT_TAB,
254 new LoadUrlParams(url,
255 PageTransition.AUTO_BOOKMARK | PageTransition.IGNORE _FOR_NTP_TILES));
252 } 256 }
253 257
254 @TargetApi(Build.VERSION_CODES.LOLLIPOP) 258 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
255 private boolean switchToExistingTab(String url) { 259 private boolean switchToExistingTab(String url) {
256 String matchPattern = CommandLine.getInstance().getSwitchValue( 260 String matchPattern = CommandLine.getInstance().getSwitchValue(
257 ChromeSwitches.NTP_SWITCH_TO_EXISTING_TAB); 261 ChromeSwitches.NTP_SWITCH_TO_EXISTING_TAB);
258 boolean matchByHost; 262 boolean matchByHost;
259 if ("url".equals(matchPattern)) { 263 if ("url".equals(matchPattern)) {
260 matchByHost = false; 264 matchByHost = false;
261 } else if ("host".equals(matchPattern)) { 265 } else if ("host".equals(matchPattern)) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 public void trackSnippetCategoryActionClick(int category, int position) { 309 public void trackSnippetCategoryActionClick(int category, int position) {
306 mSnippetsBridge.onMoreButtonClicked(category, position); 310 mSnippetsBridge.onMoreButtonClicked(category, position);
307 } 311 }
308 312
309 @Override 313 @Override
310 public void openSnippet(int windowOpenDisposition, SnippetArticle articl e) { 314 public void openSnippet(int windowOpenDisposition, SnippetArticle articl e) {
311 mSnippetsBridge.onSuggestionOpened(article.mGlobalPosition, article. mCategory, 315 mSnippetsBridge.onSuggestionOpened(article.mGlobalPosition, article. mCategory,
312 article.mPosition, article.mPublishTimestampMilliseconds, ar ticle.mScore, 316 article.mPosition, article.mPublishTimestampMilliseconds, ar ticle.mScore,
313 windowOpenDisposition); 317 windowOpenDisposition);
314 NewTabPageUma.monitorContentSuggestionVisit(mTab, article.mCategory) ; 318 NewTabPageUma.monitorContentSuggestionVisit(mTab, article.mCategory) ;
315 openUrl(windowOpenDisposition, article.mUrl); 319 int pageTransition = PageTransition.AUTO_BOOKMARK;
320 if (article.mCategory == KnownCategories.ARTICLES) {
321 pageTransition |= PageTransition.IGNORE_FOR_NTP_TILES;
322 }
323
324 openUrl(windowOpenDisposition, new LoadUrlParams(article.mUrl, pageT ransition));
316 } 325 }
317 326
318 private void openUrl(int windowOpenDisposition, String url) { 327 // TODO(mastiz): Merge with openMostVisitedItem().
328 private void openUrlMostVisited(int windowOpenDisposition, String url) {
329 openUrl(windowOpenDisposition, new LoadUrlParams(url, PageTransition .AUTO_BOOKMARK));
330 }
331
332 private void openUrl(int windowOpenDisposition, LoadUrlParams loadUrlPar ams) {
319 assert !mIsDestroyed; 333 assert !mIsDestroyed;
320 switch (windowOpenDisposition) { 334 switch (windowOpenDisposition) {
321 case WindowOpenDisposition.CURRENT_TAB: 335 case WindowOpenDisposition.CURRENT_TAB:
322 mTab.loadUrl(new LoadUrlParams(url, PageTransition.AUTO_BOOK MARK)); 336 mTab.loadUrl(loadUrlParams);
323 break; 337 break;
324 case WindowOpenDisposition.NEW_FOREGROUND_TAB: 338 case WindowOpenDisposition.NEW_FOREGROUND_TAB:
325 openUrlInNewTab(url, false); 339 openUrlInNewTab(loadUrlParams, false);
326 break; 340 break;
327 case WindowOpenDisposition.OFF_THE_RECORD: 341 case WindowOpenDisposition.OFF_THE_RECORD:
328 openUrlInNewTab(url, true); 342 openUrlInNewTab(loadUrlParams, true);
329 break; 343 break;
330 case WindowOpenDisposition.NEW_WINDOW: 344 case WindowOpenDisposition.NEW_WINDOW:
331 openUrlInNewWindow(url); 345 openUrlInNewWindow(loadUrlParams);
332 break; 346 break;
333 case WindowOpenDisposition.SAVE_TO_DISK: 347 case WindowOpenDisposition.SAVE_TO_DISK:
334 saveUrlForOffline(url); 348 saveUrlForOffline(loadUrlParams.getUrl());
335 break; 349 break;
336 default: 350 default:
337 assert false; 351 assert false;
338 } 352 }
339 } 353 }
340 354
341 @Override 355 @Override
342 public void onCreateContextMenu(ContextMenu menu, OnMenuItemClickListene r listener) { 356 public void onCreateContextMenu(ContextMenu menu, OnMenuItemClickListene r listener) {
343 if (mIsDestroyed) return; 357 if (mIsDestroyed) return;
344 if (isOpenInNewWindowEnabled()) { 358 if (isOpenInNewWindowEnabled()) {
(...skipping 11 matching lines...) Expand all
356 menu.add(Menu.NONE, ID_REMOVE, Menu.NONE, R.string.remove) 370 menu.add(Menu.NONE, ID_REMOVE, Menu.NONE, R.string.remove)
357 .setOnMenuItemClickListener(listener); 371 .setOnMenuItemClickListener(listener);
358 } 372 }
359 373
360 @Override 374 @Override
361 public boolean onMenuItemClick(int menuId, MostVisitedItem item) { 375 public boolean onMenuItemClick(int menuId, MostVisitedItem item) {
362 if (mIsDestroyed) return false; 376 if (mIsDestroyed) return false;
363 switch (menuId) { 377 switch (menuId) {
364 case ID_OPEN_IN_NEW_WINDOW: 378 case ID_OPEN_IN_NEW_WINDOW:
365 // TODO(treib): Should we call recordOpenedMostVisitedItem h ere? 379 // TODO(treib): Should we call recordOpenedMostVisitedItem h ere?
366 openUrl(WindowOpenDisposition.NEW_WINDOW, item.getUrl()); 380 openUrlMostVisited(WindowOpenDisposition.NEW_WINDOW, item.ge tUrl());
367 return true; 381 return true;
368 case ID_OPEN_IN_NEW_TAB: 382 case ID_OPEN_IN_NEW_TAB:
369 recordOpenedMostVisitedItem(item); 383 recordOpenedMostVisitedItem(item);
370 openUrl(WindowOpenDisposition.NEW_FOREGROUND_TAB, item.getUr l()); 384 openUrlMostVisited(WindowOpenDisposition.NEW_FOREGROUND_TAB, item.getUrl());
371 return true; 385 return true;
372 case ID_OPEN_IN_INCOGNITO_TAB: 386 case ID_OPEN_IN_INCOGNITO_TAB:
373 recordOpenedMostVisitedItem(item); 387 recordOpenedMostVisitedItem(item);
374 openUrl(WindowOpenDisposition.OFF_THE_RECORD, item.getUrl()) ; 388 openUrlMostVisited(WindowOpenDisposition.OFF_THE_RECORD, ite m.getUrl());
375 return true; 389 return true;
376 case ID_REMOVE: 390 case ID_REMOVE:
377 mMostVisitedSites.addBlacklistedUrl(item.getUrl()); 391 mMostVisitedSites.addBlacklistedUrl(item.getUrl());
378 showMostVisitedItemRemovedSnackbar(item.getUrl()); 392 showMostVisitedItemRemovedSnackbar(item.getUrl());
379 return true; 393 return true;
380 default: 394 default:
381 return false; 395 return false;
382 } 396 }
383 } 397 }
384 398
385 @Override 399 @Override
386 public boolean isOpenInNewWindowEnabled() { 400 public boolean isOpenInNewWindowEnabled() {
387 return MultiWindowUtils.getInstance().isOpenInOtherWindowSupported(m Activity); 401 return MultiWindowUtils.getInstance().isOpenInOtherWindowSupported(m Activity);
388 } 402 }
389 403
390 @Override 404 @Override
391 public boolean isOpenInIncognitoEnabled() { 405 public boolean isOpenInIncognitoEnabled() {
392 return PrefServiceBridge.getInstance().isIncognitoModeEnabled(); 406 return PrefServiceBridge.getInstance().isIncognitoModeEnabled();
393 } 407 }
394 408
395 private void openUrlInNewWindow(String url) { 409 private void openUrlInNewWindow(LoadUrlParams loadUrlParams) {
396 TabDelegate tabDelegate = new TabDelegate(false); 410 TabDelegate tabDelegate = new TabDelegate(false);
397 // TODO(treib): Should this use PageTransition.AUTO_BOOKMARK?
398 LoadUrlParams loadUrlParams = new LoadUrlParams(url);
399 tabDelegate.createTabInOtherWindow(loadUrlParams, mActivity, mTab.ge tParentId()); 411 tabDelegate.createTabInOtherWindow(loadUrlParams, mActivity, mTab.ge tParentId());
400 } 412 }
401 413
402 private void openUrlInNewTab(String url, boolean incognito) { 414 private void openUrlInNewTab(LoadUrlParams loadUrlParams, boolean incogn ito) {
403 mTabModelSelector.openNewTab(new LoadUrlParams(url, PageTransition.A UTO_BOOKMARK), 415 mTabModelSelector.openNewTab(
404 TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, incognito); 416 loadUrlParams, TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab , incognito);
405 } 417 }
406 418
407 private void saveUrlForOffline(String url) { 419 private void saveUrlForOffline(String url) {
408 OfflinePageBridge.getForProfile(mProfile) 420 OfflinePageBridge.getForProfile(mProfile)
409 .savePageLater(url, "ntp_suggestions", true /* userRequested */); 421 .savePageLater(url, "ntp_suggestions", true /* userRequested */);
410 } 422 }
411 423
412 @Override 424 @Override
413 public void navigateToBookmarks() { 425 public void navigateToBookmarks() {
414 if (mIsDestroyed) return; 426 if (mIsDestroyed) return;
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 @Override 926 @Override
915 public boolean shouldCaptureThumbnail() { 927 public boolean shouldCaptureThumbnail() {
916 return mNewTabPageView.shouldCaptureThumbnail(); 928 return mNewTabPageView.shouldCaptureThumbnail();
917 } 929 }
918 930
919 @Override 931 @Override
920 public void captureThumbnail(Canvas canvas) { 932 public void captureThumbnail(Canvas canvas) {
921 mNewTabPageView.captureThumbnail(canvas); 933 mNewTabPageView.captureThumbnail(canvas);
922 } 934 }
923 } 935 }
OLDNEW
« no previous file with comments | « no previous file | components/history/core/browser/history_backend.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698