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

Unified Diff: chrome/browser/ui/browser_instant_controller.cc

Issue 11824050: InstantExtended: Committed NTP (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Undo to fix blacklisting. Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/browser_instant_controller.h ('k') | chrome/browser/ui/browser_navigator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/browser_instant_controller.cc
diff --git a/chrome/browser/ui/browser_instant_controller.cc b/chrome/browser/ui/browser_instant_controller.cc
index 49d93dab257173ca9a7c3a87b2a7f47b0f378fef..ae5c0b083c4c0d607f1088da28cdebd472fb65fe 100644
--- a/chrome/browser/ui/browser_instant_controller.cc
+++ b/chrome/browser/ui/browser_instant_controller.cc
@@ -19,6 +19,7 @@
#include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/pref_names.h"
+#include "chrome/common/url_constants.h"
#include "content/public/browser/notification_service.h"
#include "grit/theme_resources.h"
#include "ui/gfx/color_utils.h"
@@ -39,13 +40,13 @@ namespace chrome {
BrowserInstantController::BrowserInstantController(Browser* browser)
: browser_(browser),
instant_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
- chrome::search::IsInstantExtendedAPIEnabled(browser->profile())),
+ chrome::search::IsInstantExtendedAPIEnabled(profile())),
instant_unload_handler_(browser),
initialized_theme_info_(false),
theme_area_height_(0) {
- profile_pref_registrar_.Init(browser_->profile()->GetPrefs());
+ profile_pref_registrar_.Init(profile()->GetPrefs());
profile_pref_registrar_.Add(
- GetInstantPrefName(browser_->profile()),
+ GetInstantPrefName(profile()),
base::Bind(&BrowserInstantController::ResetInstant,
base::Unretained(this)));
profile_pref_registrar_.Add(
@@ -59,7 +60,7 @@ BrowserInstantController::BrowserInstantController(Browser* browser)
// Listen for theme installation.
registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
content::Source<ThemeService>(
- ThemeServiceFactory::GetForProfile(browser_->profile())));
+ ThemeServiceFactory::GetForProfile(profile())));
#endif // defined(ENABLE_THEMES)
}
@@ -98,6 +99,33 @@ void BrowserInstantController::RegisterUserPrefs(PrefServiceSyncable* prefs) {
PrefServiceSyncable::SYNCABLE_PREF);
}
+bool BrowserInstantController::MaybeSwapInInstantNTPContents(
+ const GURL& url,
+ content::WebContents* source_contents,
+ content::WebContents** target_contents) {
+ if (url != GURL(chrome::kChromeUINewTabURL))
+ return false;
+
+ scoped_ptr<content::WebContents> instant_ntp = instant_.ReleaseNTPContents();
+ if (!instant_ntp)
+ return false;
+
+ *target_contents = instant_ntp.get();
+ instant_ntp->GetController().PruneAllButActive();
+ if (source_contents) {
+ instant_ntp->GetController().CopyStateFromAndPrune(
+ &source_contents->GetController());
+ ReplaceWebContentsAt(
+ browser_->tab_strip_model()->GetIndexOfWebContents(source_contents),
+ instant_ntp.Pass());
+ } else {
+ // If |source_contents| is NULL, then the caller is responsible for
+ // inserting instant_ntp into the tabstrip and will take ownership.
+ ignore_result(instant_ntp.release());
+ }
+ return true;
+}
+
bool BrowserInstantController::OpenInstant(WindowOpenDisposition disposition) {
// Unsupported dispositions.
if (disposition == NEW_BACKGROUND_TAB || disposition == NEW_WINDOW)
@@ -113,31 +141,43 @@ bool BrowserInstantController::OpenInstant(WindowOpenDisposition disposition) {
INSTANT_COMMIT_PRESSED_ENTER : INSTANT_COMMIT_PRESSED_ALT_ENTER);
}
-void BrowserInstantController::CommitInstant(content::WebContents* preview,
- bool in_new_tab) {
+Profile* BrowserInstantController::profile() const {
+ return browser_->profile();
+}
+
+void BrowserInstantController::CommitInstant(
+ scoped_ptr<content::WebContents> preview,
+ bool in_new_tab) {
+ if (profile()->GetExtensionService()->IsInstalledApp(preview->GetURL())) {
+ AppLauncherHandler::RecordAppLaunchType(
+ extension_misc::APP_LAUNCH_OMNIBOX_INSTANT);
+ }
if (in_new_tab) {
// TabStripModel takes ownership of |preview|.
- browser_->tab_strip_model()->AddWebContents(preview, -1,
+ browser_->tab_strip_model()->AddWebContents(preview.release(), -1,
instant_.last_transition_type(), TabStripModel::ADD_ACTIVE);
} else {
- int index = browser_->tab_strip_model()->active_index();
- DCHECK_NE(TabStripModel::kNoTab, index);
- content::WebContents* active_tab =
- browser_->tab_strip_model()->GetWebContentsAt(index);
- // TabStripModel takes ownership of |preview|.
- browser_->tab_strip_model()->ReplaceWebContentsAt(index, preview);
- // InstantUnloadHandler takes ownership of |active_tab|.
- instant_unload_handler_.RunUnloadListenersOrDestroy(active_tab, index);
-
- GURL url = preview->GetURL();
- DCHECK(browser_->profile()->GetExtensionService());
- if (browser_->profile()->GetExtensionService()->IsInstalledApp(url)) {
- AppLauncherHandler::RecordAppLaunchType(
- extension_misc::APP_LAUNCH_OMNIBOX_INSTANT);
- }
+ ReplaceWebContentsAt(
+ browser_->tab_strip_model()->active_index(),
+ preview.Pass());
}
}
+void BrowserInstantController::ReplaceWebContentsAt(
+ int index,
+ scoped_ptr<content::WebContents> new_contents) {
+ DCHECK_NE(TabStripModel::kNoTab, index);
+ content::WebContents* old_contents =
+ browser_->tab_strip_model()->GetWebContentsAt(index);
+ // TabStripModel takes ownership of |new_contents|.
+ browser_->tab_strip_model()->ReplaceWebContentsAt(
+ index, new_contents.release());
+ // TODO(samarth): use scoped_ptr instead of comments to document ownership
+ // transfer.
+ // InstantUnloadHandler takes ownership of |old_contents|.
+ instant_unload_handler_.RunUnloadListenersOrDestroy(old_contents, index);
+}
+
void BrowserInstantController::SetInstantSuggestion(
const InstantSuggestion& suggestion) {
browser_->window()->GetLocationBar()->SetInstantSuggestion(suggestion);
@@ -180,7 +220,7 @@ void BrowserInstantController::UpdateThemeInfoForPreview() {
// Initialize |theme_info| if necessary.
// |OnThemeChanged| also updates theme area height if necessary.
if (!initialized_theme_info_)
- OnThemeChanged(ThemeServiceFactory::GetForProfile(browser_->profile()));
+ OnThemeChanged(ThemeServiceFactory::GetForProfile(profile()));
else
OnThemeChanged(NULL);
}
@@ -200,12 +240,10 @@ void BrowserInstantController::SetMarginSize(int start, int end) {
}
void BrowserInstantController::ResetInstant() {
- Profile* profile = browser_->profile();
-
- bool instant_enabled = IsInstantEnabled(profile);
- bool use_local_preview_only = profile->IsOffTheRecord() ||
+ bool instant_enabled = IsInstantEnabled(profile());
+ bool use_local_preview_only = profile()->IsOffTheRecord() ||
(!instant_enabled &&
- !profile->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled));
+ !profile()->GetPrefs()->GetBoolean(prefs::kSearchSuggestEnabled));
instant_.SetInstantEnabled(instant_enabled, use_local_preview_only);
}
« no previous file with comments | « chrome/browser/ui/browser_instant_controller.h ('k') | chrome/browser/ui/browser_navigator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698