1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/google/chrome_google_url_tracker_client.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/command_line.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/google/google_url_tracker_navigation_helper_impl.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/google/core/browser/google_url_tracker.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/notification_service.h" 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/public/browser/web_contents.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)ChromeGoogleURLTrackerClient::ChromeGoogleURLTrackerClient(Profile* profile) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) : profile_(profile) { 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)ChromeGoogleURLTrackerClient::~ChromeGoogleURLTrackerClient() { 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ChromeGoogleURLTrackerClient::SetListeningForNavigationStart(bool listen) { 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (listen) { 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) registrar_.Add( 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this, 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_PENDING, 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NotificationService::AllBrowserContextsAndSources()); 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) registrar_.Remove( 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this, 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_PENDING, 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NotificationService::AllBrowserContextsAndSources()); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool ChromeGoogleURLTrackerClient::IsListeningForNavigationStart() { 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return registrar_.IsRegistered( 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NOTIFICATION_NAV_ENTRY_PENDING, 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NotificationService::AllBrowserContextsAndSources()); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool ChromeGoogleURLTrackerClient::IsBackgroundNetworkingEnabled() { 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return !CommandLine::ForCurrentProcess()->HasSwitch( 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) switches::kDisableBackgroundNetworking); 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)PrefService* ChromeGoogleURLTrackerClient::GetPrefs() { 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return profile_->GetPrefs(); 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)net::URLRequestContextGetter* 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)ChromeGoogleURLTrackerClient::GetRequestContext() { 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return profile_->GetRequestContext(); 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ChromeGoogleURLTrackerClient::Observe( 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int type, 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const content::NotificationSource& source, 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const content::NotificationDetails& details) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(content::NOTIFICATION_NAV_ENTRY_PENDING, type); 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::NavigationController* controller = 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) content::Source<content::NavigationController>(source).ptr(); 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InfoBarService* infobar_service = 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InfoBarService::FromWebContents(controller->GetWebContents()); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Because we're listening to all sources, there may be no InfoBarService for 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // some notifications, e.g. navigations in bubbles/balloons etc. 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (infobar_service) { 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) google_url_tracker()->OnNavigationPending( 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<GoogleURLTrackerNavigationHelper>( 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) new GoogleURLTrackerNavigationHelperImpl( 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) controller->GetWebContents(), google_url_tracker())), 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) infobar_service, 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) controller->GetPendingEntry()->GetUniqueID()); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 81