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 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } | |
OLD | NEW |