| Index: chrome/browser/ui/search/instant_ntp_prerenderer.cc
|
| diff --git a/chrome/browser/ui/search/instant_ntp_prerenderer.cc b/chrome/browser/ui/search/instant_ntp_prerenderer.cc
|
| deleted file mode 100644
|
| index ee698fb87783b4bc1d44b2fb532368a1387e846c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/search/instant_ntp_prerenderer.cc
|
| +++ /dev/null
|
| @@ -1,269 +0,0 @@
|
| -// Copyright 2013 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/ui/search/instant_ntp_prerenderer.h"
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/prefs/pref_service.h"
|
| -#include "build/build_config.h"
|
| -#include "chrome/browser/chrome_notification_types.h"
|
| -#include "chrome/browser/content_settings/content_settings_provider.h"
|
| -#include "chrome/browser/content_settings/host_content_settings_map.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/search/instant_service.h"
|
| -#include "chrome/browser/search/instant_service_factory.h"
|
| -#include "chrome/browser/search/search.h"
|
| -#include "chrome/browser/ui/browser.h"
|
| -#include "chrome/browser/ui/browser_finder.h"
|
| -#include "chrome/browser/ui/host_desktop.h"
|
| -#include "chrome/browser/ui/search/instant_ntp.h"
|
| -#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| -#include "chrome/common/content_settings.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/common/search_urls.h"
|
| -#include "content/public/browser/notification_service.h"
|
| -#include "content/public/browser/render_process_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "net/base/network_change_notifier.h"
|
| -
|
| -namespace {
|
| -
|
| -void DeleteNTPSoon(scoped_ptr<InstantNTP> ntp) {
|
| - if (!ntp)
|
| - return;
|
| -
|
| - if (ntp->contents()) {
|
| - base::MessageLoop::current()->DeleteSoon(
|
| - FROM_HERE, ntp->ReleaseContents().release());
|
| - }
|
| - base::MessageLoop::current()->DeleteSoon(FROM_HERE, ntp.release());
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -
|
| -InstantNTPPrerenderer::InstantNTPPrerenderer(Profile* profile,
|
| - InstantService* instant_service,
|
| - PrefService* prefs)
|
| - : profile_(profile) {
|
| - DCHECK(profile);
|
| -
|
| - // In unit tests, prefs may be NULL.
|
| - if (prefs) {
|
| - profile_pref_registrar_.Init(prefs);
|
| - profile_pref_registrar_.Add(
|
| - prefs::kSearchSuggestEnabled,
|
| - base::Bind(&InstantNTPPrerenderer::ReloadInstantNTP,
|
| - base::Unretained(this)));
|
| - }
|
| - net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
|
| -
|
| - // Allow instant_service to be null for unit tets.
|
| - if (instant_service)
|
| - instant_service->AddObserver(this);
|
| -}
|
| -
|
| -InstantNTPPrerenderer::~InstantNTPPrerenderer() {
|
| - InstantService* instant_service =
|
| - InstantServiceFactory::GetForProfile(profile_);
|
| - if (instant_service)
|
| - instant_service->RemoveObserver(this);
|
| - net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::ReloadInstantNTP() {
|
| - ResetNTP(GetInstantURL());
|
| -}
|
| -
|
| -scoped_ptr<content::WebContents> InstantNTPPrerenderer::ReleaseNTPContents() {
|
| - if (!profile_ || profile_->IsOffTheRecord() ||
|
| - !chrome::ShouldShowInstantNTP())
|
| - return scoped_ptr<content::WebContents>();
|
| -
|
| - if (ShouldSwitchToLocalNTP())
|
| - ResetNTP(GetLocalInstantURL());
|
| -
|
| - scoped_ptr<content::WebContents> ntp_contents = ntp_->ReleaseContents();
|
| -
|
| - // Preload a new InstantNTP.
|
| - ReloadInstantNTP();
|
| - return ntp_contents.Pass();
|
| -}
|
| -
|
| -content::WebContents* InstantNTPPrerenderer::GetNTPContents() const {
|
| - return ntp() ? ntp()->contents() : NULL;
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::DeleteNTPContents() {
|
| - if (ntp_)
|
| - ntp_.reset();
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::RenderProcessGone() {
|
| - DeleteNTPSoon(ntp_.Pass());
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::LoadCompletedMainFrame() {
|
| - if (!ntp_ || ntp_->supports_instant())
|
| - return;
|
| -
|
| - content::WebContents* ntp_contents = ntp_->contents();
|
| - DCHECK(ntp_contents);
|
| -
|
| - InstantService* instant_service =
|
| - InstantServiceFactory::GetForProfile(profile());
|
| - if (instant_service &&
|
| - instant_service->IsInstantProcess(
|
| - ntp_contents->GetRenderProcessHost()->GetID())) {
|
| - return;
|
| - }
|
| - InstantSupportDetermined(ntp_contents, false);
|
| -}
|
| -
|
| -std::string InstantNTPPrerenderer::GetLocalInstantURL() const {
|
| - return chrome::GetLocalInstantURL(profile_).spec();
|
| -}
|
| -
|
| -std::string InstantNTPPrerenderer::GetInstantURL() const {
|
| - if (net::NetworkChangeNotifier::IsOffline())
|
| - return GetLocalInstantURL();
|
| -
|
| - // TODO(kmadhusu): Remove start margin param from chrome::GetInstantURL().
|
| - const GURL instant_url = chrome::GetInstantURL(profile_,
|
| - chrome::kDisableStartMargin,
|
| - false);
|
| - if (!instant_url.is_valid())
|
| - return GetLocalInstantURL();
|
| -
|
| - return instant_url.spec();
|
| -}
|
| -
|
| -bool InstantNTPPrerenderer::IsJavascriptEnabled() const {
|
| - GURL instant_url(GetInstantURL());
|
| - GURL origin(instant_url.GetOrigin());
|
| - ContentSetting js_setting = profile_->GetHostContentSettingsMap()->
|
| - GetContentSetting(origin, origin, CONTENT_SETTINGS_TYPE_JAVASCRIPT,
|
| - NO_RESOURCE_IDENTIFIER);
|
| - // Javascript can be disabled either in content settings or via a WebKit
|
| - // preference, so check both. Disabling it through the Settings page affects
|
| - // content settings. I'm not sure how to disable the WebKit preference, but
|
| - // it's theoretically possible some users have it off.
|
| - bool js_content_enabled =
|
| - js_setting == CONTENT_SETTING_DEFAULT ||
|
| - js_setting == CONTENT_SETTING_ALLOW;
|
| - bool js_webkit_enabled = profile_->GetPrefs()->GetBoolean(
|
| - prefs::kWebKitJavascriptEnabled);
|
| - return js_content_enabled && js_webkit_enabled;
|
| -}
|
| -
|
| -bool InstantNTPPrerenderer::InStartup() const {
|
| -#if !defined(OS_ANDROID)
|
| - // TODO(kmadhusu): This is not completely reliable. Find a better way to
|
| - // detect startup time.
|
| - Browser* browser = chrome::FindBrowserWithProfile(profile_,
|
| - chrome::GetActiveDesktop());
|
| - return !browser || !browser->tab_strip_model()->GetActiveWebContents();
|
| -#endif
|
| - return false;
|
| -}
|
| -
|
| -InstantNTP* InstantNTPPrerenderer::ntp() const {
|
| - return ntp_.get();
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::OnNetworkChanged(
|
| - net::NetworkChangeNotifier::ConnectionType type) {
|
| - // Not interested in events conveying change to offline.
|
| - if (type == net::NetworkChangeNotifier::CONNECTION_NONE)
|
| - return;
|
| -
|
| - if (!ntp() || ntp()->IsLocal())
|
| - ReloadInstantNTP();
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::InstantSupportDetermined(
|
| - const content::WebContents* contents,
|
| - bool supports_instant) {
|
| - DCHECK(ntp() && ntp()->contents() == contents);
|
| -
|
| - if (!supports_instant) {
|
| - bool is_local = ntp()->IsLocal();
|
| - DeleteNTPSoon(ntp_.Pass());
|
| - if (!is_local)
|
| - ResetNTP(GetLocalInstantURL());
|
| - }
|
| -
|
| - content::NotificationService::current()->Notify(
|
| - chrome::NOTIFICATION_INSTANT_NTP_SUPPORT_DETERMINED,
|
| - content::Source<InstantNTPPrerenderer>(this),
|
| - content::NotificationService::NoDetails());
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::InstantPageAboutToNavigateMainFrame(
|
| - const content::WebContents* /* contents */,
|
| - const GURL& /* url */) {
|
| - NOTREACHED();
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::InstantPageLoadFailed(
|
| - content::WebContents* contents) {
|
| - DCHECK(ntp() && ntp()->contents() == contents);
|
| -
|
| - bool is_local = ntp()->IsLocal();
|
| - DeleteNTPSoon(ntp_.Pass());
|
| - if (!is_local)
|
| - ResetNTP(GetLocalInstantURL());
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::ResetNTP(const std::string& instant_url) {
|
| - // Instant NTP is only used in extended mode so we should always have a
|
| - // non-empty URL to use.
|
| - DCHECK(!instant_url.empty());
|
| - if (!chrome::ShouldUseCacheableNTP()) {
|
| - ntp_.reset(new InstantNTP(this, instant_url, profile_));
|
| - ntp_->InitContents(base::Bind(&InstantNTPPrerenderer::ReloadInstantNTP,
|
| - base::Unretained(this)));
|
| - }
|
| -}
|
| -
|
| -bool InstantNTPPrerenderer::PageIsCurrent() const {
|
| - const std::string& instant_url = GetInstantURL();
|
| - if (instant_url.empty() ||
|
| - !search::MatchesOriginAndPath(GURL(ntp()->instant_url()),
|
| - GURL(instant_url)))
|
| - return false;
|
| -
|
| - return ntp()->supports_instant();
|
| -}
|
| -
|
| -bool InstantNTPPrerenderer::ShouldSwitchToLocalNTP() const {
|
| - if (!ntp())
|
| - return true;
|
| -
|
| - // Assume users with Javascript disabled do not want the online experience.
|
| - if (!IsJavascriptEnabled())
|
| - return true;
|
| -
|
| - // Already a local page. Not calling IsLocal() because we want to distinguish
|
| - // between the Google-specific and generic local NTP.
|
| - if (ntp()->instant_url() == GetLocalInstantURL())
|
| - return false;
|
| -
|
| - if (PageIsCurrent())
|
| - return false;
|
| -
|
| - // The preloaded NTP does not support instant yet. If we're not in startup,
|
| - // always fall back to the local NTP. If we are in startup, use the local NTP.
|
| - return !InStartup();
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::DefaultSearchProviderChanged() {
|
| - ReloadInstantNTP();
|
| -}
|
| -
|
| -void InstantNTPPrerenderer::GoogleURLUpdated() {
|
| - ReloadInstantNTP();
|
| -}
|
|
|