OLD | NEW |
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 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 DCHECK(!url.empty()); | 477 DCHECK(!url.empty()); |
478 template_url->data_.SetShortName(short_name); | 478 template_url->data_.SetShortName(short_name); |
479 template_url->data_.SetKeyword(keyword); | 479 template_url->data_.SetKeyword(keyword); |
480 template_url->SetURL(url); | 480 template_url->SetURL(url); |
481 return Add(std::move(template_url)); | 481 return Add(std::move(template_url)); |
482 } | 482 } |
483 | 483 |
484 TemplateURL* TemplateURLService::AddExtensionControlledTURL( | 484 TemplateURL* TemplateURLService::AddExtensionControlledTURL( |
485 std::unique_ptr<TemplateURL> template_url, | 485 std::unique_ptr<TemplateURL> template_url, |
486 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> info) { | 486 std::unique_ptr<TemplateURL::AssociatedExtensionInfo> info) { |
| 487 DCHECK(loaded_); |
487 DCHECK(template_url); | 488 DCHECK(template_url); |
488 DCHECK_EQ(kInvalidTemplateURLID, template_url->id()); | 489 DCHECK_EQ(kInvalidTemplateURLID, template_url->id()); |
489 DCHECK(info); | 490 DCHECK(info); |
490 DCHECK_NE(TemplateURL::NORMAL, template_url->type()); | 491 DCHECK_NE(TemplateURL::NORMAL, template_url->type()); |
491 DCHECK( | 492 DCHECK( |
492 !FindTemplateURLForExtension(info->extension_id, template_url->type())); | 493 !FindTemplateURLForExtension(info->extension_id, template_url->type())); |
493 | |
494 template_url->extension_info_.swap(info); | 494 template_url->extension_info_.swap(info); |
495 | 495 |
| 496 KeywordWebDataService::BatchModeScoper scoper(web_data_service_.get()); |
496 TemplateURL* template_url_ptr = AddNoNotify(std::move(template_url), true); | 497 TemplateURL* template_url_ptr = AddNoNotify(std::move(template_url), true); |
497 if (template_url_ptr) | 498 if (template_url_ptr) { |
| 499 if (template_url_ptr->extension_info_->wants_to_be_default_engine) { |
| 500 UpdateExtensionDefaultSearchEngine(); |
| 501 } |
498 NotifyObservers(); | 502 NotifyObservers(); |
| 503 } |
499 | 504 |
500 return template_url_ptr; | 505 return template_url_ptr; |
501 } | 506 } |
502 | 507 |
503 void TemplateURLService::Remove(TemplateURL* template_url) { | 508 void TemplateURLService::Remove(TemplateURL* template_url) { |
504 RemoveNoNotify(template_url); | 509 RemoveNoNotify(template_url); |
505 NotifyObservers(); | 510 NotifyObservers(); |
506 } | 511 } |
507 | 512 |
508 void TemplateURLService::RemoveExtensionControlledTURL( | 513 void TemplateURLService::RemoveExtensionControlledTURL( |
509 const std::string& extension_id, | 514 const std::string& extension_id, |
510 TemplateURL::Type type) { | 515 TemplateURL::Type type) { |
511 DCHECK(loaded_); | 516 DCHECK(loaded_); |
512 TemplateURL* url = FindTemplateURLForExtension(extension_id, type); | 517 TemplateURL* url = FindTemplateURLForExtension(extension_id, type); |
513 if (!url) | 518 if (!url) |
514 return; | 519 return; |
515 // NULL this out so that we can call RemoveNoNotify. | 520 // NULL this out so that we can call RemoveNoNotify. |
| 521 // UpdateExtensionDefaultSearchEngine will cause it to be reset. |
516 if (default_search_provider_ == url) | 522 if (default_search_provider_ == url) |
517 default_search_provider_ = nullptr; | 523 default_search_provider_ = nullptr; |
| 524 KeywordWebDataService::BatchModeScoper scoper(web_data_service_.get()); |
518 RemoveNoNotify(url); | 525 RemoveNoNotify(url); |
| 526 UpdateExtensionDefaultSearchEngine(); |
519 NotifyObservers(); | 527 NotifyObservers(); |
520 } | 528 } |
521 | 529 |
522 void TemplateURLService::RemoveAutoGeneratedSince(base::Time created_after) { | 530 void TemplateURLService::RemoveAutoGeneratedSince(base::Time created_after) { |
523 RemoveAutoGeneratedBetween(created_after, base::Time()); | 531 RemoveAutoGeneratedBetween(created_after, base::Time()); |
524 } | 532 } |
525 | 533 |
526 void TemplateURLService::RemoveAutoGeneratedBetween(base::Time created_after, | 534 void TemplateURLService::RemoveAutoGeneratedBetween(base::Time created_after, |
527 base::Time created_before) { | 535 base::Time created_before) { |
528 RemoveAutoGeneratedForUrlsBetween(base::Callback<bool(const GURL&)>(), | 536 RemoveAutoGeneratedForUrlsBetween(base::Callback<bool(const GURL&)>(), |
(...skipping 1435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1964 UpdateProvidersCreatedByPolicy( | 1972 UpdateProvidersCreatedByPolicy( |
1965 &template_urls_, | 1973 &template_urls_, |
1966 source == DefaultSearchManager::FROM_POLICY ? data : nullptr); | 1974 source == DefaultSearchManager::FROM_POLICY ? data : nullptr); |
1967 } | 1975 } |
1968 | 1976 |
1969 if (!data) { | 1977 if (!data) { |
1970 default_search_provider_ = nullptr; | 1978 default_search_provider_ = nullptr; |
1971 } else if (source == DefaultSearchManager::FROM_EXTENSION) { | 1979 } else if (source == DefaultSearchManager::FROM_EXTENSION) { |
1972 default_search_provider_ = FindMatchingExtensionTemplateURL( | 1980 default_search_provider_ = FindMatchingExtensionTemplateURL( |
1973 *data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); | 1981 *data, TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); |
1974 DCHECK(default_search_provider_); | |
1975 } else if (source == DefaultSearchManager::FROM_FALLBACK) { | 1982 } else if (source == DefaultSearchManager::FROM_FALLBACK) { |
1976 default_search_provider_ = | 1983 default_search_provider_ = |
1977 FindPrepopulatedTemplateURL(data->prepopulate_id); | 1984 FindPrepopulatedTemplateURL(data->prepopulate_id); |
1978 if (default_search_provider_) { | 1985 if (default_search_provider_) { |
1979 TemplateURLData update_data(*data); | 1986 TemplateURLData update_data(*data); |
1980 update_data.sync_guid = default_search_provider_->sync_guid(); | 1987 update_data.sync_guid = default_search_provider_->sync_guid(); |
1981 if (!default_search_provider_->safe_for_autoreplace()) { | 1988 if (!default_search_provider_->safe_for_autoreplace()) { |
1982 update_data.safe_for_autoreplace = false; | 1989 update_data.safe_for_autoreplace = false; |
1983 update_data.SetKeyword(default_search_provider_->keyword()); | 1990 update_data.SetKeyword(default_search_provider_->keyword()); |
1984 update_data.SetShortName(default_search_provider_->short_name()); | 1991 update_data.SetShortName(default_search_provider_->short_name()); |
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2485 const TemplateURLData& data, | 2492 const TemplateURLData& data, |
2486 TemplateURL::Type type) { | 2493 TemplateURL::Type type) { |
2487 DCHECK_NE(TemplateURL::NORMAL, type); | 2494 DCHECK_NE(TemplateURL::NORMAL, type); |
2488 for (const auto& turl : template_urls_) { | 2495 for (const auto& turl : template_urls_) { |
2489 if (turl->type() == type && | 2496 if (turl->type() == type && |
2490 TemplateURL::MatchesData(turl.get(), &data, search_terms_data())) | 2497 TemplateURL::MatchesData(turl.get(), &data, search_terms_data())) |
2491 return turl.get(); | 2498 return turl.get(); |
2492 } | 2499 } |
2493 return nullptr; | 2500 return nullptr; |
2494 } | 2501 } |
| 2502 |
| 2503 void TemplateURLService::UpdateExtensionDefaultSearchEngine() { |
| 2504 TemplateURL* most_recently_intalled_default = nullptr; |
| 2505 for (const auto& turl : template_urls_) { |
| 2506 if ((turl->type() == TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION) && |
| 2507 turl->extension_info_->wants_to_be_default_engine && |
| 2508 turl->SupportsReplacement(search_terms_data()) && |
| 2509 (!most_recently_intalled_default || |
| 2510 (most_recently_intalled_default->extension_info_->install_time < |
| 2511 turl->extension_info_->install_time))) |
| 2512 most_recently_intalled_default = turl.get(); |
| 2513 } |
| 2514 |
| 2515 if (most_recently_intalled_default) { |
| 2516 base::AutoReset<DefaultSearchChangeOrigin> change_origin( |
| 2517 &dsp_change_origin_, DSP_CHANGE_OVERRIDE_SETTINGS_EXTENSION); |
| 2518 default_search_manager_.SetExtensionControlledDefaultSearchEngine( |
| 2519 most_recently_intalled_default->data()); |
| 2520 } else { |
| 2521 default_search_manager_.ClearExtensionControlledDefaultSearchEngine(); |
| 2522 } |
| 2523 } |
OLD | NEW |