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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegateImpl.java

Issue 2623993007: 🏠 Extract the ContentSuggestionManager interface from NTP (Closed)
Patch Set: fix destruction of snippets bridge Created 3 years, 11 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.suggestions;
6
7 import android.app.Activity;
8
9 import org.chromium.base.metrics.RecordUserAction;
10 import org.chromium.chrome.browser.UrlConstants;
11 import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
12 import org.chromium.chrome.browser.download.DownloadUtils;
13 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
14 import org.chromium.chrome.browser.ntp.NewTabPage.DestructionObserver;
15 import org.chromium.chrome.browser.ntp.NewTabPageUma;
16 import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
17 import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
18 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
19 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
20 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
21 import org.chromium.chrome.browser.profiles.Profile;
22 import org.chromium.chrome.browser.tab.Tab;
23 import org.chromium.chrome.browser.tabmodel.TabModel;
24 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
25 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
26 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
27 import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
28 import org.chromium.content_public.browser.LoadUrlParams;
29 import org.chromium.content_public.common.Referrer;
30 import org.chromium.ui.base.PageTransition;
31 import org.chromium.ui.mojom.WindowOpenDisposition;
32
33 /**
34 * {@link SuggestionsUiDelegate} implementation.
35 */
36 public class SuggestionsNavigationDelegateImpl
Michael van Ouwerkerk 2017/01/16 15:31:15 Most of this file is a move from NewTabPage.java,
37 implements SuggestionsNavigationDelegate, DestructionObserver {
38 private static final String CHROME_CONTENT_SUGGESTIONS_REFERRER =
39 "https://www.googleapis.com/auth/chrome-content-suggestions";
40
41 private final Activity mActivity;
42 private final Profile mProfile;
43
44 private final Tab mTab;
45 private final TabModelSelector mTabModelSelector;
46 private boolean mIsDestroyed;
Bernhard Bauer 2017/01/16 11:08:37 Is the destroyed check necessary here if we don't
dgn 2017/01/18 16:22:27 I don't think so... It was mostly moved from the N
47
48 public SuggestionsNavigationDelegateImpl(
49 Activity activity, Profile profile, Tab currentTab, TabModelSelector tabModelSelector) {
50 mActivity = activity;
51 mProfile = profile;
52 mTab = currentTab;
53 mTabModelSelector = tabModelSelector;
54 }
55
56 @Override
57 public boolean isOpenInNewWindowEnabled() {
58 return MultiWindowUtils.getInstance().isOpenInOtherWindowSupported(mActi vity);
59 }
60
61 @Override
62 public boolean isOpenInIncognitoEnabled() {
63 return PrefServiceBridge.getInstance().isIncognitoModeEnabled();
64 }
65
66 @Override
67 public void navigateToBookmarks() {
68 if (mIsDestroyed) return;
69 RecordUserAction.record("MobileNTPSwitchToBookmarks");
70 BookmarkUtils.showBookmarkManager(mActivity);
71 }
72
73 @Override
74 public void navigateToRecentTabs() {
75 if (mIsDestroyed) return;
76 RecordUserAction.record("MobileNTPSwitchToOpenTabs");
77 mTab.loadUrl(new LoadUrlParams(UrlConstants.RECENT_TABS_URL));
78 }
79
80 @Override
81 public void navigateToDownloadManager() {
82 if (mIsDestroyed) return;
83 assert DownloadUtils.isDownloadHomeEnabled();
84
85 RecordUserAction.record("MobileNTPSwitchToDownloadManager");
86 DownloadUtils.showDownloadManager(mActivity, mTab);
87 }
88
89 @Override
90 public void onLearnMoreClicked() {
91 if (mIsDestroyed) return;
92 NewTabPageUma.recordAction(NewTabPageUma.ACTION_CLICKED_LEARN_MORE);
93 String url = "https://support.google.com/chrome/?p=new_tab";
94 // TODO(mastiz): Change this to LINK?
95 openUrl(WindowOpenDisposition.CURRENT_TAB,
96 new LoadUrlParams(url, PageTransition.AUTO_BOOKMARK));
97 }
98
99 @Override
100 public void openSnippet(int windowOpenDisposition, SnippetArticle article) {
101 NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_SNIPPET);
102
103 if (article.mIsAssetDownload) {
104 assert windowOpenDisposition == WindowOpenDisposition.CURRENT_TAB
105 || windowOpenDisposition == WindowOpenDisposition.NEW_WINDOW
106 || windowOpenDisposition == WindowOpenDisposition.NEW_FOREGR OUND_TAB;
107 DownloadUtils.openFile(
108 article.getAssetDownloadFile(), article.getAssetDownloadMime Type(), false);
109 return;
110 }
111
112 if (article.isRecentTab()) {
113 assert windowOpenDisposition == WindowOpenDisposition.CURRENT_TAB;
114 // TODO(vitaliii): Add a debug check that the result is true after c rbug.com/662924
115 // is resolved.
116 openRecentTabSnippet(article);
117 return;
118 }
119
120 // TODO(treib): Also track other dispositions. crbug.com/665915
121 if (windowOpenDisposition == WindowOpenDisposition.CURRENT_TAB) {
122 NewTabPageUma.monitorContentSuggestionVisit(mTab, article.mCategory) ;
123 }
124
125 LoadUrlParams loadUrlParams;
126 // We explicitly open an offline page only for offline page downloads. F or all other
127 // sections the URL is opened and it is up to Offline Pages whether to o pen its offline
128 // page (e.g. when offline).
129 if (article.isDownload() && !article.mIsAssetDownload) {
130 assert article.getOfflinePageOfflineId() != null;
131 assert windowOpenDisposition == WindowOpenDisposition.CURRENT_TAB
132 || windowOpenDisposition == WindowOpenDisposition.NEW_WINDOW
133 || windowOpenDisposition == WindowOpenDisposition.NEW_FOREGR OUND_TAB;
134 loadUrlParams = OfflinePageUtils.getLoadUrlParamsForOpeningOfflineVe rsion(
135 article.mUrl, article.getOfflinePageOfflineId());
136 // Extra headers are not read in loadUrl, but verbatim headers are.
137 loadUrlParams.setVerbatimHeaders(loadUrlParams.getExtraHeadersString ());
138 } else {
139 loadUrlParams = new LoadUrlParams(article.mUrl, PageTransition.AUTO_ BOOKMARK);
140 }
141
142 // For article suggestions, we set the referrer. This is exploited
143 // to filter out these history entries for NTP tiles.
144 // TODO(mastiz): Extend this with support for other categories.
145 if (article.mCategory == KnownCategories.ARTICLES) {
146 loadUrlParams.setReferrer(new Referrer(
147 CHROME_CONTENT_SUGGESTIONS_REFERRER, Referrer.REFERRER_POLIC Y_ALWAYS));
148 }
149
150 openUrl(windowOpenDisposition, loadUrlParams);
151 }
152
153 @Override
154 public void openUrl(int windowOpenDisposition, LoadUrlParams loadUrlParams) {
155 assert !mIsDestroyed;
156 switch (windowOpenDisposition) {
157 case WindowOpenDisposition.CURRENT_TAB:
158 mTab.loadUrl(loadUrlParams);
159 break;
160 case WindowOpenDisposition.NEW_FOREGROUND_TAB:
161 openUrlInNewTab(loadUrlParams, false);
162 break;
163 case WindowOpenDisposition.OFF_THE_RECORD:
164 openUrlInNewTab(loadUrlParams, true);
165 break;
166 case WindowOpenDisposition.NEW_WINDOW:
167 openUrlInNewWindow(loadUrlParams);
168 break;
169 case WindowOpenDisposition.SAVE_TO_DISK:
170 saveUrlForOffline(loadUrlParams.getUrl());
171 break;
172 default:
173 assert false;
174 }
175 }
176
177 private boolean openRecentTabSnippet(SnippetArticle article) {
178 TabModel tabModel = mTabModelSelector.getModel(false);
179 int tabId = Integer.parseInt(article.getRecentTabId());
180 int tabIndex = TabModelUtils.getTabIndexById(tabModel, tabId);
181 if (tabIndex == TabModel.INVALID_TAB_INDEX) return false;
182 TabModelUtils.setIndex(tabModel, tabIndex);
183 return true;
184 }
185
186 private void openUrlInNewWindow(LoadUrlParams loadUrlParams) {
187 TabDelegate tabDelegate = new TabDelegate(false);
188 tabDelegate.createTabInOtherWindow(loadUrlParams, mActivity, mTab.getPar entId());
189 }
190
191 private void openUrlInNewTab(LoadUrlParams loadUrlParams, boolean incognito) {
192 mTabModelSelector.openNewTab(
193 loadUrlParams, TabLaunchType.FROM_LONGPRESS_BACKGROUND, mTab, in cognito);
194 }
195
196 private void saveUrlForOffline(String url) {
197 OfflinePageBridge.getForProfile(mProfile).savePageLater(
198 url, "ntp_suggestions", true /* userRequested */);
199 }
200
201 @Override
202 public void onDestroy() {
203 mIsDestroyed = true;
204 }
205 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698