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

Side by Side Diff: components/search_engines/template_url_service.cc

Issue 2639153002: Make extensions DSE persistent in browser prefs (Reland) (Closed)
Patch Set: Fixed after review, round 4 Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/search_engines/template_url_service.h" 5 #include "components/search_engines/template_url_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 DCHECK(!url.empty()); 445 DCHECK(!url.empty());
446 template_url->data_.SetShortName(short_name); 446 template_url->data_.SetShortName(short_name);
447 template_url->data_.SetKeyword(keyword); 447 template_url->data_.SetKeyword(keyword);
448 template_url->SetURL(url); 448 template_url->SetURL(url);
449 return Add(std::move(template_url)); 449 return Add(std::move(template_url));
450 } 450 }
451 451
452 TemplateURL* TemplateURLService::AddExtensionControlledTURL( 452 TemplateURL* TemplateURLService::AddExtensionControlledTURL(
453 std::unique_ptr<TemplateURL> template_url, 453 std::unique_ptr<TemplateURL> template_url,
454 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> info) { 454 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> info) {
455 DCHECK(loaded_);
456 DCHECK(template_url); 455 DCHECK(template_url);
457 DCHECK_EQ(kInvalidTemplateURLID, template_url->id()); 456 DCHECK_EQ(kInvalidTemplateURLID, template_url->id());
458 DCHECK(info); 457 DCHECK(info);
459 DCHECK_NE(TemplateURL::NORMAL, template_url->type()); 458 DCHECK_NE(TemplateURL::NORMAL, template_url->type());
460 DCHECK( 459 DCHECK(
461 !FindTemplateURLForExtension(info->extension_id, template_url->type())); 460 !FindTemplateURLForExtension(info->extension_id, template_url->type()));
461
462 template_url->extension_info_.swap(info); 462 template_url->extension_info_.swap(info);
463 463
464 KeywordWebDataService::BatchModeScoper scoper(web_data_service_.get());
465 TemplateURL* template_url_ptr = AddNoNotify(std::move(template_url), true); 464 TemplateURL* template_url_ptr = AddNoNotify(std::move(template_url), true);
466 if (template_url_ptr) { 465 if (template_url_ptr)
467 if (template_url_ptr->extension_info_->wants_to_be_default_engine) {
468 UpdateExtensionDefaultSearchEngine();
469 }
470 NotifyObservers(); 466 NotifyObservers();
471 }
472 467
473 return template_url_ptr; 468 return template_url_ptr;
Peter Kasting 2017/02/28 00:56:37 Collapse these four lines into "return Add(...);".
Alexander Yashkin 2017/02/28 11:59:56 Collapse done. Good idea for refactoring, will do
474 } 469 }
475 470
476 void TemplateURLService::Remove(TemplateURL* template_url) { 471 void TemplateURLService::Remove(TemplateURL* template_url) {
477 RemoveNoNotify(template_url); 472 RemoveNoNotify(template_url);
478 NotifyObservers(); 473 NotifyObservers();
479 } 474 }
480 475
481 void TemplateURLService::RemoveExtensionControlledTURL( 476 void TemplateURLService::RemoveExtensionControlledTURL(
482 const std::string& extension_id, 477 const std::string& extension_id,
483 TemplateURL::Type type) { 478 TemplateURL::Type type) {
484 DCHECK(loaded_);
485 TemplateURL* url = FindTemplateURLForExtension(extension_id, type); 479 TemplateURL* url = FindTemplateURLForExtension(extension_id, type);
486 if (!url) 480 if (!url)
487 return; 481 return;
488 // NULL this out so that we can call RemoveNoNotify. 482 // NULL this out so that we can call RemoveNoNotify.
489 // UpdateExtensionDefaultSearchEngine will cause it to be reset.
490 if (default_search_provider_ == url) 483 if (default_search_provider_ == url)
491 default_search_provider_ = nullptr; 484 default_search_provider_ = nullptr;
492 KeywordWebDataService::BatchModeScoper scoper(web_data_service_.get());
493 RemoveNoNotify(url); 485 RemoveNoNotify(url);
494 UpdateExtensionDefaultSearchEngine();
495 NotifyObservers(); 486 NotifyObservers();
Peter Kasting 2017/02/28 00:56:37 Nit: Collapse these two lines to a call to Remove(
Alexander Yashkin 2017/02/28 11:59:56 Done.
496 } 487 }
497 488
498 void TemplateURLService::RemoveAutoGeneratedSince(base::Time created_after) { 489 void TemplateURLService::RemoveAutoGeneratedSince(base::Time created_after) {
499 RemoveAutoGeneratedBetween(created_after, base::Time()); 490 RemoveAutoGeneratedBetween(created_after, base::Time());
500 } 491 }
501 492
502 void TemplateURLService::RemoveAutoGeneratedBetween(base::Time created_after, 493 void TemplateURLService::RemoveAutoGeneratedBetween(base::Time created_after,
503 base::Time created_before) { 494 base::Time created_before) {
504 RemoveAutoGeneratedForUrlsBetween(base::Callback<bool(const GURL&)>(), 495 RemoveAutoGeneratedForUrlsBetween(base::Callback<bool(const GURL&)>(),
505 created_after, created_before); 496 created_after, created_before);
(...skipping 1427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1933 bool TemplateURLService::ApplyDefaultSearchChangeNoMetrics( 1924 bool TemplateURLService::ApplyDefaultSearchChangeNoMetrics(
1934 const TemplateURLData* data, 1925 const TemplateURLData* data,
1935 DefaultSearchManager::Source source) { 1926 DefaultSearchManager::Source source) {
1936 if (!loaded_) { 1927 if (!loaded_) {
1937 // Set |initial_default_search_provider_| from the preferences. This is 1928 // Set |initial_default_search_provider_| from the preferences. This is
1938 // mainly so we can hold ownership until we get to the point where the list 1929 // mainly so we can hold ownership until we get to the point where the list
1939 // of keywords from Web Data is the owner of everything including the 1930 // of keywords from Web Data is the owner of everything including the
1940 // default. 1931 // default.
1941 bool changed = TemplateURL::MatchesData( 1932 bool changed = TemplateURL::MatchesData(
1942 initial_default_search_provider_.get(), data, search_terms_data()); 1933 initial_default_search_provider_.get(), data, search_terms_data());
1934 TemplateURL::Type initial_engine_type =
1935 (source == DefaultSearchManager::FROM_EXTENSION)
1936 ? TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION
1937 : TemplateURL::NORMAL;
1943 initial_default_search_provider_ = 1938 initial_default_search_provider_ =
1944 data ? base::MakeUnique<TemplateURL>(*data) : nullptr; 1939 data ? base::MakeUnique<TemplateURL>(*data, initial_engine_type)
1940 : nullptr;
1945 default_search_provider_source_ = source; 1941 default_search_provider_source_ = source;
1946 return changed; 1942 return changed;
1947 } 1943 }
1948 1944
1949 // Prevent recursion if we update the value stored in default_search_manager_. 1945 // Prevent recursion if we update the value stored in default_search_manager_.
1950 // Note that we exclude the case of data == NULL because that could cause a 1946 // Note that we exclude the case of data == NULL because that could cause a
1951 // false positive for recursion when the initial_default_search_provider_ is 1947 // false positive for recursion when the initial_default_search_provider_ is
1952 // NULL due to policy. We'll never actually get recursion with data == NULL. 1948 // NULL due to policy. We'll never actually get recursion with data == NULL.
1953 if (source == default_search_provider_source_ && data != nullptr && 1949 if (source == default_search_provider_source_ && data != nullptr &&
1954 TemplateURL::MatchesData(default_search_provider_, data, 1950 TemplateURL::MatchesData(default_search_provider_, data,
(...skipping 16 matching lines...) Expand all
1971 1967
1972 // |default_search_provider_source_| must be set before calling 1968 // |default_search_provider_source_| must be set before calling
1973 // UpdateNoNotify(), since that function needs to know the source of the 1969 // UpdateNoNotify(), since that function needs to know the source of the
1974 // update in question. 1970 // update in question.
1975 default_search_provider_source_ = source; 1971 default_search_provider_source_ = source;
1976 1972
1977 if (!data) { 1973 if (!data) {
1978 default_search_provider_ = nullptr; 1974 default_search_provider_ = nullptr;
1979 } else if (source == DefaultSearchManager::FROM_EXTENSION) { 1975 } else if (source == DefaultSearchManager::FROM_EXTENSION) {
1980 default_search_provider_ = FindMatchingDefaultExtensionTemplateURL(*data); 1976 default_search_provider_ = FindMatchingDefaultExtensionTemplateURL(*data);
1977 DCHECK(default_search_provider_);
1981 } else if (source == DefaultSearchManager::FROM_FALLBACK) { 1978 } else if (source == DefaultSearchManager::FROM_FALLBACK) {
1982 default_search_provider_ = 1979 default_search_provider_ =
1983 FindPrepopulatedTemplateURL(data->prepopulate_id); 1980 FindPrepopulatedTemplateURL(data->prepopulate_id);
1984 if (default_search_provider_) { 1981 if (default_search_provider_) {
1985 TemplateURLData update_data(*data); 1982 TemplateURLData update_data(*data);
1986 update_data.sync_guid = default_search_provider_->sync_guid(); 1983 update_data.sync_guid = default_search_provider_->sync_guid();
1987 if (!default_search_provider_->safe_for_autoreplace()) { 1984 if (!default_search_provider_->safe_for_autoreplace()) {
1988 update_data.safe_for_autoreplace = false; 1985 update_data.safe_for_autoreplace = false;
1989 update_data.SetKeyword(default_search_provider_->keyword()); 1986 update_data.SetKeyword(default_search_provider_->keyword());
1990 update_data.SetShortName(default_search_provider_->short_name()); 1987 update_data.SetShortName(default_search_provider_->short_name());
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
2480 TemplateURL* TemplateURLService::FindMatchingDefaultExtensionTemplateURL( 2477 TemplateURL* TemplateURLService::FindMatchingDefaultExtensionTemplateURL(
2481 const TemplateURLData& data) { 2478 const TemplateURLData& data) {
2482 for (const auto& turl : template_urls_) { 2479 for (const auto& turl : template_urls_) {
2483 if (turl->type() == TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION && 2480 if (turl->type() == TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION &&
2484 turl->extension_info_->wants_to_be_default_engine && 2481 turl->extension_info_->wants_to_be_default_engine &&
2485 TemplateURL::MatchesData(turl.get(), &data, search_terms_data())) 2482 TemplateURL::MatchesData(turl.get(), &data, search_terms_data()))
2486 return turl.get(); 2483 return turl.get();
2487 } 2484 }
2488 return nullptr; 2485 return nullptr;
2489 } 2486 }
2490
2491 void TemplateURLService::UpdateExtensionDefaultSearchEngine() {
2492 TemplateURL* most_recently_intalled_default = nullptr;
2493 for (const auto& turl : template_urls_) {
2494 if ((turl->type() == TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION) &&
2495 turl->extension_info_->wants_to_be_default_engine &&
2496 turl->SupportsReplacement(search_terms_data()) &&
2497 (!most_recently_intalled_default ||
2498 (most_recently_intalled_default->extension_info_->install_time <
2499 turl->extension_info_->install_time)))
2500 most_recently_intalled_default = turl.get();
2501 }
2502
2503 if (most_recently_intalled_default) {
2504 base::AutoReset<DefaultSearchChangeOrigin> change_origin(
2505 &dsp_change_origin_, DSP_CHANGE_OVERRIDE_SETTINGS_EXTENSION);
2506 default_search_manager_.SetExtensionControlledDefaultSearchEngine(
2507 most_recently_intalled_default->data());
2508 } else {
2509 default_search_manager_.ClearExtensionControlledDefaultSearchEngine();
2510 }
2511 }
OLDNEW
« components/search_engines/template_url.h ('K') | « components/search_engines/template_url_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698