Index: chrome/browser/search_engines/search_provider_install_data.cc |
diff --git a/chrome/browser/search_engines/search_provider_install_data.cc b/chrome/browser/search_engines/search_provider_install_data.cc |
deleted file mode 100644 |
index fa73b0f08590141c7ed81d3e647322d936c5845d..0000000000000000000000000000000000000000 |
--- a/chrome/browser/search_engines/search_provider_install_data.cc |
+++ /dev/null |
@@ -1,317 +0,0 @@ |
-// Copyright (c) 2012 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/search_engines/search_provider_install_data.h" |
- |
-#include <algorithm> |
-#include <functional> |
-#include <utility> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/sequenced_task_runner_helpers.h" |
-#include "components/google/core/browser/google_url_tracker.h" |
-#include "components/search_engines/search_host_to_urls_map.h" |
-#include "components/search_engines/search_terms_data.h" |
-#include "components/search_engines/template_url.h" |
-#include "components/search_engines/template_url_service.h" |
-#include "components/search_engines/util.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "content/public/browser/render_process_host_observer.h" |
- |
-using content::BrowserThread; |
- |
-typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet; |
- |
-namespace { |
- |
-void LoadDataOnUIThread(TemplateURLService* template_url_service, |
- const base::Callback<void(ScopedVector<TemplateURL>, |
- TemplateURL*)>& callback) { |
- ScopedVector<TemplateURL> template_url_copies; |
- TemplateURL* default_provider_copy = NULL; |
- TemplateURLService::TemplateURLVector original_template_urls = |
- template_url_service->GetTemplateURLs(); |
- TemplateURL* original_default_provider = |
- template_url_service->GetDefaultSearchProvider(); |
- for (TemplateURLService::TemplateURLVector::const_iterator it = |
- original_template_urls.begin(); |
- it != original_template_urls.end(); |
- ++it) { |
- template_url_copies.push_back(new TemplateURL((*it)->data())); |
- if (*it == original_default_provider) |
- default_provider_copy = template_url_copies.back(); |
- } |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(callback, base::Passed(std::move(template_url_copies)), |
- base::Unretained(default_provider_copy))); |
-} |
- |
-// Implementation of SearchTermsData that may be used on the I/O thread. |
-class IOThreadSearchTermsData : public SearchTermsData { |
- public: |
- explicit IOThreadSearchTermsData(const std::string& google_base_url); |
- |
- // Implementation of SearchTermsData. |
- std::string GoogleBaseURLValue() const override; |
- |
- private: |
- std::string google_base_url_; |
- |
- DISALLOW_COPY_AND_ASSIGN(IOThreadSearchTermsData); |
-}; |
- |
-IOThreadSearchTermsData::IOThreadSearchTermsData( |
- const std::string& google_base_url) : google_base_url_(google_base_url) { |
-} |
- |
-std::string IOThreadSearchTermsData::GoogleBaseURLValue() const { |
- return google_base_url_; |
-} |
- |
-// Handles telling SearchProviderInstallData about changes to the google base |
-// url. (Ensure that this is deleted on the I/O thread so that the WeakPtr is |
-// deleted on the correct thread.) |
-class GoogleURLChangeNotifier |
- : public base::RefCountedThreadSafe<GoogleURLChangeNotifier, |
- BrowserThread::DeleteOnIOThread> { |
- public: |
- explicit GoogleURLChangeNotifier( |
- const base::WeakPtr<SearchProviderInstallData>& install_data); |
- |
- // Called on the I/O thread with the Google base URL whenever the value |
- // changes. |
- void OnChange(const std::string& google_base_url); |
- |
- private: |
- friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>; |
- friend class base::DeleteHelper<GoogleURLChangeNotifier>; |
- |
- ~GoogleURLChangeNotifier() {} |
- |
- base::WeakPtr<SearchProviderInstallData> install_data_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GoogleURLChangeNotifier); |
-}; |
- |
-GoogleURLChangeNotifier::GoogleURLChangeNotifier( |
- const base::WeakPtr<SearchProviderInstallData>& install_data) |
- : install_data_(install_data) { |
-} |
- |
-void GoogleURLChangeNotifier::OnChange(const std::string& google_base_url) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- if (install_data_.get()) |
- install_data_->OnGoogleURLChange(google_base_url); |
-} |
- |
-// Notices changes in the Google base URL and sends them along |
-// to the SearchProviderInstallData on the I/O thread. |
-class GoogleURLObserver : public content::RenderProcessHostObserver { |
- public: |
- GoogleURLObserver(GoogleURLTracker* google_url_tracker, |
- GoogleURLChangeNotifier* change_notifier, |
- content::RenderProcessHost* host); |
- |
- // Implementation of content::RenderProcessHostObserver. |
- void RenderProcessHostDestroyed(content::RenderProcessHost* host) override; |
- |
- private: |
- ~GoogleURLObserver() override {} |
- |
- // Callback that is called when the Google URL is updated. |
- void OnGoogleURLUpdated(); |
- |
- GoogleURLTracker* google_url_tracker_; |
- scoped_refptr<GoogleURLChangeNotifier> change_notifier_; |
- |
- std::unique_ptr<GoogleURLTracker::Subscription> |
- google_url_updated_subscription_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GoogleURLObserver); |
-}; |
- |
-GoogleURLObserver::GoogleURLObserver( |
- GoogleURLTracker* google_url_tracker, |
- GoogleURLChangeNotifier* change_notifier, |
- content::RenderProcessHost* host) |
- : google_url_tracker_(google_url_tracker), |
- change_notifier_(change_notifier) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- google_url_updated_subscription_ = |
- google_url_tracker_->RegisterCallback(base::Bind( |
- &GoogleURLObserver::OnGoogleURLUpdated, base::Unretained(this))); |
- host->AddObserver(this); |
-} |
- |
-void GoogleURLObserver::OnGoogleURLUpdated() { |
- BrowserThread::PostTask(BrowserThread::IO, |
- FROM_HERE, |
- base::Bind(&GoogleURLChangeNotifier::OnChange, |
- change_notifier_.get(), |
- google_url_tracker_->google_url().spec())); |
-} |
- |
-void GoogleURLObserver::RenderProcessHostDestroyed( |
- content::RenderProcessHost* host) { |
- delete this; |
-} |
- |
-// Indicates if the two inputs have the same security origin. |
-// |requested_origin| should only be a security origin (no path, etc.). |
-// It is ok if |template_url| is NULL. |
-static bool IsSameOrigin(const GURL& requested_origin, |
- TemplateURL* template_url, |
- const SearchTermsData& search_terms_data) { |
- DCHECK(requested_origin == requested_origin.GetOrigin()); |
- DCHECK(template_url->GetType() != TemplateURL::OMNIBOX_API_EXTENSION); |
- return requested_origin == |
- template_url->GenerateSearchURL(search_terms_data).GetOrigin(); |
-} |
- |
-} // namespace |
- |
-SearchProviderInstallData::SearchProviderInstallData( |
- TemplateURLService* template_url_service, |
- const std::string& google_base_url, |
- GoogleURLTracker* google_url_tracker, |
- content::RenderProcessHost* host) |
- : template_url_service_(template_url_service), |
- google_base_url_(google_base_url), |
- weak_factory_(this) { |
- // GoogleURLTracker is not created in tests. |
- if (google_url_tracker) { |
- // GoogleURLObserver is responsible for killing itself when |
- // the given notification occurs. |
- new GoogleURLObserver( |
- google_url_tracker, |
- new GoogleURLChangeNotifier(weak_factory_.GetWeakPtr()), |
- host); |
- } |
-} |
- |
-SearchProviderInstallData::~SearchProviderInstallData() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
-} |
- |
-void SearchProviderInstallData::CallWhenLoaded(const base::Closure& closure) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
- if (provider_map_.get()) { |
- closure.Run(); |
- return; |
- } |
- |
- bool do_load = closure_queue_.empty(); |
- closure_queue_.push_back(closure); |
- |
- // If the queue wasn't empty, there was already a load in progress. |
- if (!do_load) |
- return; |
- |
- if (template_url_service_) { |
- BrowserThread::PostTask( |
- BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&LoadDataOnUIThread, |
- template_url_service_, |
- base::Bind(&SearchProviderInstallData::OnTemplateURLsLoaded, |
- weak_factory_.GetWeakPtr()))); |
- } else { |
- OnLoadFailed(); |
- } |
-} |
- |
-SearchProviderInstallData::State SearchProviderInstallData::GetInstallState( |
- const GURL& requested_origin) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- DCHECK(provider_map_.get()); |
- |
- // First check to see if the origin is the default search provider. |
- if (requested_origin.spec() == default_search_origin_) |
- return INSTALLED_AS_DEFAULT; |
- |
- // Is the url any search provider? |
- const TemplateURLSet* urls = provider_map_->GetURLsForHost( |
- requested_origin.host()); |
- if (!urls) |
- return NOT_INSTALLED; |
- |
- IOThreadSearchTermsData search_terms_data(google_base_url_); |
- for (TemplateURLSet::const_iterator i = urls->begin(); |
- i != urls->end(); ++i) { |
- if (IsSameOrigin(requested_origin, *i, search_terms_data)) |
- return INSTALLED_BUT_NOT_DEFAULT; |
- } |
- return NOT_INSTALLED; |
-} |
- |
-void SearchProviderInstallData::OnGoogleURLChange( |
- const std::string& google_base_url) { |
- google_base_url_ = google_base_url; |
-} |
- |
-void SearchProviderInstallData::OnTemplateURLsLoaded( |
- ScopedVector<TemplateURL> template_urls, |
- TemplateURL* default_provider) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
- template_urls_ = std::move(template_urls); |
- |
- IOThreadSearchTermsData search_terms_data(google_base_url_); |
- provider_map_.reset(new SearchHostToURLsMap()); |
- provider_map_->Init(template_urls_.get(), search_terms_data); |
- SetDefault(default_provider); |
- NotifyLoaded(); |
-} |
- |
-void SearchProviderInstallData::SetDefault(const TemplateURL* template_url) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
- if (!template_url) { |
- default_search_origin_.clear(); |
- return; |
- } |
- |
- DCHECK(template_url->GetType() != TemplateURL::OMNIBOX_API_EXTENSION); |
- |
- IOThreadSearchTermsData search_terms_data(google_base_url_); |
- const GURL url(template_url->GenerateSearchURL(search_terms_data)); |
- if (!url.is_valid() || !url.has_host()) { |
- default_search_origin_.clear(); |
- return; |
- } |
- default_search_origin_ = url.GetOrigin().spec(); |
-} |
- |
-void SearchProviderInstallData::OnLoadFailed() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
- provider_map_.reset(new SearchHostToURLsMap()); |
- IOThreadSearchTermsData search_terms_data(google_base_url_); |
- provider_map_->Init(template_urls_.get(), search_terms_data); |
- SetDefault(NULL); |
- NotifyLoaded(); |
-} |
- |
-void SearchProviderInstallData::NotifyLoaded() { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- |
- std::vector<base::Closure> closure_queue; |
- closure_queue.swap(closure_queue_); |
- |
- for (auto& closure : closure_queue) |
- closure.Run(); |
- |
- // Since we expect this request to be rare, clear out the information. This |
- // also keeps the responses current as the search providers change. |
- provider_map_.reset(); |
- SetDefault(NULL); |
-} |