| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 PageTransition 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |