Index: trunk/src/chrome/browser/search/search.cc |
=================================================================== |
--- trunk/src/chrome/browser/search/search.cc (revision 244428) |
+++ trunk/src/chrome/browser/search/search.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include "base/command_line.h" |
#include "base/metrics/field_trial.h" |
#include "base/prefs/pref_service.h" |
+#include "base/rand_util.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_split.h" |
#include "base/strings/utf_string_conversions.h" |
@@ -58,7 +59,13 @@ |
const uint64 kEmbeddedPageVersionDefault = 2; |
#endif |
+// The staleness timeout can be set (in seconds) via this config. |
+const char kStalePageTimeoutFlagName[] = "stale"; |
+const int kStalePageTimeoutDefault = 3 * 3600; // 3 hours. |
+ |
const char kHideVerbatimFlagName[] = "hide_verbatim"; |
+const char kShowNtpFlagName[] = "show_ntp"; |
+const char kUseCacheableNTP[] = "use_cacheable_ntp"; |
const char kPrefetchSearchResultsFlagName[] = "prefetch_results"; |
const char kPrefetchSearchResultsOnSRP[] = "prefetch_results_srp"; |
const char kDisplaySearchButtonFlagName[] = "display_search_button"; |
@@ -388,9 +395,14 @@ |
if (entry->GetURL() == GetLocalInstantURL(profile)) |
return true; |
- GURL new_tab_url(GetNewTabPageURL(profile)); |
- return new_tab_url.is_valid() && |
- search::MatchesOriginAndPath(entry->GetURL(), new_tab_url); |
+ if (ShouldUseCacheableNTP()) { |
+ GURL new_tab_url(GetNewTabPageURL(profile)); |
+ return new_tab_url.is_valid() && |
+ search::MatchesOriginAndPath(entry->GetURL(), new_tab_url); |
+ } |
+ |
+ return IsInstantURL(entry->GetVirtualURL(), profile) && |
+ GetSearchTermsImpl(contents, entry).empty(); |
} |
bool IsSuggestPrefEnabled(Profile* profile) { |
@@ -446,6 +458,9 @@ |
} |
GURL GetNewTabPageURL(Profile* profile) { |
+ if (!ShouldUseCacheableNTP()) |
+ return GURL(); |
+ |
if (!profile || profile->IsOffTheRecord()) |
return GURL(); |
@@ -473,6 +488,9 @@ |
} |
bool ShouldPrefetchSearchResults() { |
+ if (!ShouldUseCacheableNTP()) |
+ return false; |
+ |
FieldTrialFlags flags; |
return GetFieldTrialInfo(&flags) && GetBoolValueForFlagWithDefault( |
kPrefetchSearchResultsFlagName, false, flags); |
@@ -488,6 +506,23 @@ |
kHideVerbatimFlagName, false, flags); |
} |
+bool ShouldUseCacheableNTP() { |
+ FieldTrialFlags flags; |
+ return !GetFieldTrialInfo(&flags) || GetBoolValueForFlagWithDefault( |
+ kUseCacheableNTP, true, flags); |
+} |
+ |
+bool ShouldShowInstantNTP() { |
+ // If using the cacheable NTP, load the NTP directly instead of preloading its |
+ // contents using InstantNTP. |
+ if (ShouldUseCacheableNTP()) |
+ return false; |
+ |
+ FieldTrialFlags flags; |
+ return !GetFieldTrialInfo(&flags) || |
+ GetBoolValueForFlagWithDefault(kShowNtpFlagName, true, flags); |
+} |
+ |
DisplaySearchButtonConditions GetDisplaySearchButtonConditions() { |
const CommandLine* cl = CommandLine::ForCurrentProcess(); |
if (cl->HasSwitch(switches::kDisableSearchButtonInOmnibox)) { |
@@ -570,6 +605,43 @@ |
return effective_url; |
} |
+int GetInstantLoaderStalenessTimeoutSec() { |
+ int timeout_sec = kStalePageTimeoutDefault; |
+ FieldTrialFlags flags; |
+ if (GetFieldTrialInfo(&flags)) { |
+ timeout_sec = GetUInt64ValueForFlagWithDefault(kStalePageTimeoutFlagName, |
+ kStalePageTimeoutDefault, |
+ flags); |
+ } |
+ |
+ // Require a minimum 5 minute timeout. |
+ if (timeout_sec < 0 || (timeout_sec > 0 && timeout_sec < 300)) |
+ timeout_sec = kStalePageTimeoutDefault; |
+ |
+ // Randomize by upto 15% either side. |
+ timeout_sec = base::RandInt(timeout_sec * 0.85, timeout_sec * 1.15); |
+ |
+ return timeout_sec; |
+} |
+ |
+bool IsPreloadedInstantExtendedNTP(const content::WebContents* contents) { |
+ if (!IsInstantExtendedAPIEnabled()) |
+ return false; |
+ |
+ ProfileManager* profile_manager = g_browser_process->profile_manager(); |
+ if (!profile_manager) |
+ return false; // The profile manager can be NULL while testing. |
+ |
+ const std::vector<Profile*>& profiles = profile_manager->GetLoadedProfiles(); |
+ for (size_t i = 0; i < profiles.size(); ++i) { |
+ const InstantService* instant_service = |
+ InstantServiceFactory::GetForProfile(profiles[i]); |
+ if (instant_service && instant_service->GetNTPContents() == contents) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
bool HandleNewTabURLRewrite(GURL* url, |
content::BrowserContext* browser_context) { |
if (!IsInstantExtendedAPIEnabled()) |