Commit 4bd78e9c authored by newt@chromium.org's avatar newt@chromium.org

[Android] Rewrite old-style NTP URLs to new-style URLs.

For example, chrome://newtab#bookmarks becomes
chrome-native://bookmarks. This helps users transition smoothly to the
new NTP: any tabs open to the old NTP when the user updates will start
showing the new NTP. Also: opening a foreign session tab from other
platforms and pressing back until arriving at chrome://newtab will now
show the new NTP.

BUG=354063
NOTRY=true

Review URL: https://codereview.chromium.org/205983005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260218 0039d316-1c4b-4281-b951-d872f2087c98
parent b4e90543
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/android/new_tab_page_url_handler.h"
#include <string>
#include "base/strings/string_util.h"
#include "chrome/common/url_constants.h"
#include "content/public/common/url_constants.h"
#include "url/gurl.h"
namespace {
const char kLegacyBookmarksFragment[] = "bookmarks";
const char kLegacyOpenTabsFragment[] = "open_tabs";
const char kLegacyRecentTabsHost[] = "recent_tabs";
}
namespace chrome {
namespace android {
bool HandleAndroidNewTabURL(GURL* url,
content::BrowserContext* browser_context) {
if (url->SchemeIs(content::kChromeUIScheme) &&
url->host() == chrome::kChromeUINewTabHost) {
std::string ref = url->ref();
if (StartsWithASCII(ref, kLegacyBookmarksFragment, true)) {
*url = GURL(chrome::kChromeUINativeBookmarksURL);
} else if (ref == kLegacyOpenTabsFragment) {
*url = GURL(chrome::kChromeUINativeRecentTabsURL);
} else {
*url = GURL(chrome::kChromeUINativeNewTabURL);
}
return true;
}
if (url->SchemeIs(chrome::kChromeNativeScheme) &&
url->host() == kLegacyRecentTabsHost) {
*url = GURL(chrome::kChromeUINativeRecentTabsURL);
return true;
}
return false;
}
} // namespace android
} // namespace chrome
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ANDROID_NEW_TAB_PAGE_URL_HANDLER_H_
#define CHROME_BROWSER_ANDROID_NEW_TAB_PAGE_URL_HANDLER_H_
class GURL;
namespace content {
class BrowserContext;
}
namespace chrome {
namespace android {
// Rewrites old-style Android NTP URLs to new-style NTP URLs:
// - chrome://newtab -> chrome-native://newtab
// - chrome://newtab#most_visited -> chrome-native://newtab
// - chrome://newtab#incognito -> chrome-native://newtab
// - chrome://newtab#bookmarks -> chrome-native://bookmarks
// - chrome://newtab#bookmarks:99 -> chrome-native://bookmarks
// - chrome://newtab#open_tabs -> chrome-native://recent-tabs
// - chrome-native://recent_tabs -> chrome-native://recent-tabs
//
// TODO(newt): Once most users have upgraded past M34, simplify this down to a
// single rule: chrome://newtab -> chrome-native://newtab
bool HandleAndroidNewTabURL(GURL* url,
content::BrowserContext* browser_context);
} // namespace android
} // namespace chrome
#endif // CHROME_BROWSER_ANDROID_NEW_TAB_PAGE_URL_HANDLER_H_
...@@ -173,6 +173,7 @@ ...@@ -173,6 +173,7 @@
#elif defined(OS_LINUX) #elif defined(OS_LINUX)
#include "chrome/browser/chrome_browser_main_linux.h" #include "chrome/browser/chrome_browser_main_linux.h"
#elif defined(OS_ANDROID) #elif defined(OS_ANDROID)
#include "chrome/browser/android/new_tab_page_url_handler.h"
#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" #include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h"
#include "chrome/browser/chrome_browser_main_android.h" #include "chrome/browser/chrome_browser_main_android.h"
#include "chrome/browser/media/encrypted_media_message_filter_android.h" #include "chrome/browser/media/encrypted_media_message_filter_android.h"
...@@ -2397,9 +2398,15 @@ void ChromeContentBrowserClient::BrowserURLHandlerCreated( ...@@ -2397,9 +2398,15 @@ void ChromeContentBrowserClient::BrowserURLHandlerCreated(
handler->AddHandlerPair(&WillHandleBrowserAboutURL, handler->AddHandlerPair(&WillHandleBrowserAboutURL,
BrowserURLHandler::null_handler()); BrowserURLHandler::null_handler());
#if defined(OS_ANDROID)
// Handler to rewrite chrome://newtab on Android.
handler->AddHandlerPair(&chrome::android::HandleAndroidNewTabURL,
BrowserURLHandler::null_handler());
#else
// Handler to rewrite chrome://newtab for InstantExtended. // Handler to rewrite chrome://newtab for InstantExtended.
handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite, handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite,
&chrome::HandleNewTabURLReverseRewrite); &chrome::HandleNewTabURLReverseRewrite);
#endif
// chrome: & friends. // chrome: & friends.
handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse); handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse);
......
...@@ -147,6 +147,8 @@ ...@@ -147,6 +147,8 @@
'browser/android/meta_tag_observer.h', 'browser/android/meta_tag_observer.h',
'browser/android/new_tab_page_prefs.cc', 'browser/android/new_tab_page_prefs.cc',
'browser/android/new_tab_page_prefs.h', 'browser/android/new_tab_page_prefs.h',
'browser/android/new_tab_page_url_handler.cc',
'browser/android/new_tab_page_url_handler.h',
'browser/android/google_location_settings_helper.h', 'browser/android/google_location_settings_helper.h',
'browser/android/intent_helper.cc', 'browser/android/intent_helper.cc',
'browser/android/intent_helper.h', 'browser/android/intent_helper.h',
......
...@@ -479,6 +479,7 @@ void ChromeContentClient::AddAdditionalSchemes( ...@@ -479,6 +479,7 @@ void ChromeContentClient::AddAdditionalSchemes(
std::vector<std::string>* savable_schemes) { std::vector<std::string>* savable_schemes) {
standard_schemes->push_back(extensions::kExtensionScheme); standard_schemes->push_back(extensions::kExtensionScheme);
savable_schemes->push_back(extensions::kExtensionScheme); savable_schemes->push_back(extensions::kExtensionScheme);
standard_schemes->push_back(chrome::kChromeNativeScheme);
standard_schemes->push_back(extensions::kExtensionResourceScheme); standard_schemes->push_back(extensions::kExtensionResourceScheme);
savable_schemes->push_back(extensions::kExtensionResourceScheme); savable_schemes->push_back(extensions::kExtensionResourceScheme);
standard_schemes->push_back(chrome::kChromeSearchScheme); standard_schemes->push_back(chrome::kChromeSearchScheme);
......
...@@ -93,6 +93,8 @@ const char kChromeUIVersionURL[] = "chrome://version/"; ...@@ -93,6 +93,8 @@ const char kChromeUIVersionURL[] = "chrome://version/";
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
const char kChromeUINativeNewTabURL[] = "chrome-native://newtab/"; const char kChromeUINativeNewTabURL[] = "chrome-native://newtab/";
const char kChromeUINativeBookmarksURL[] = "chrome-native://bookmarks/";
const char kChromeUINativeRecentTabsURL[] = "chrome-native://recent-tabs/";
const char kChromeUIWelcomeURL[] = "chrome://welcome/"; const char kChromeUIWelcomeURL[] = "chrome://welcome/";
#endif #endif
......
...@@ -88,6 +88,8 @@ extern const char kChromeUIVersionURL[]; ...@@ -88,6 +88,8 @@ extern const char kChromeUIVersionURL[];
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
extern const char kChromeUINativeNewTabURL[]; extern const char kChromeUINativeNewTabURL[];
extern const char kChromeUINativeBookmarksURL[];
extern const char kChromeUINativeRecentTabsURL[];
extern const char kChromeUIWelcomeURL[]; extern const char kChromeUIWelcomeURL[];
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment