diff --git a/chrome/browser/autocomplete/search_provider_unittest.cc b/chrome/browser/autocomplete/search_provider_unittest.cc index a9b23d6..464d88b 100644 --- a/chrome/browser/autocomplete/search_provider_unittest.cc +++ b/chrome/browser/autocomplete/search_provider_unittest.cc
@@ -2816,92 +2816,6 @@ match.contents_class[2].style); } -// Verifies that "http://" is trimmed in the general case. -TEST_F(SearchProviderTest, DoTrimHttpScheme) { - const base::string16 input(ASCIIToUTF16("face book")); - const base::string16 url(ASCIIToUTF16("http://www.facebook.com")); - SearchSuggestionParser::NavigationResult result( - ChromeAutocompleteSchemeClassifier(&profile_), GURL(url), - AutocompleteMatchType::NAVSUGGEST, 0, base::string16(), std::string(), - false, 0, false, input); - - // Generate the contents and check for the presence of a scheme. - QueryForInput(input, false, false); - AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); - EXPECT_EQ(ASCIIToUTF16("www.facebook.com"), match_inline.contents); -} - -// Verifies that "http://" is not trimmed for input that has a scheme, even if -// the input doesn't match the URL. -TEST_F(SearchProviderTest, DontTrimHttpSchemeIfInputHasScheme) { - const base::string16 input(ASCIIToUTF16("https://face book")); - const base::string16 url(ASCIIToUTF16("http://www.facebook.com")); - SearchSuggestionParser::NavigationResult result( - ChromeAutocompleteSchemeClassifier(&profile_), GURL(url), - AutocompleteMatchType::NAVSUGGEST, 0, base::string16(), std::string(), - false, 0, false, input); - - // Generate the contents and check for the presence of a scheme. - QueryForInput(input, false, false); - AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); - EXPECT_EQ(url, match_inline.contents); -} - -// Verifies that "https://" is not trimmed for input in the general case. -TEST_F(SearchProviderTest, DontTrimHttpsScheme) { - const base::string16 input(ASCIIToUTF16("face book")); - const base::string16 url(ASCIIToUTF16("https://www.facebook.com")); - SearchSuggestionParser::NavigationResult result( - ChromeAutocompleteSchemeClassifier(&profile_), GURL(url), - AutocompleteMatchType::NAVSUGGEST, 0, base::string16(), std::string(), - false, 0, false, input); - - // Generate the contents and check for the presence of a scheme. - QueryForInput(input, false, false); - AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); - EXPECT_EQ(url, match_inline.contents); -} - -// Verifies that "https://" is not trimmed for input that has a (non-matching) -// scheme, even if flag requests it. -TEST_F(SearchProviderTest, DontTrimHttpsSchemeDespiteFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitAndEnableFeature( - omnibox::kUIExperimentHideSuggestionUrlScheme); - - const base::string16 input(ASCIIToUTF16("http://face book")); - const base::string16 url(ASCIIToUTF16("https://www.facebook.com")); - SearchSuggestionParser::NavigationResult result( - ChromeAutocompleteSchemeClassifier(&profile_), GURL(url), - AutocompleteMatchType::NAVSUGGEST, 0, base::string16(), std::string(), - false, 0, false, input); - - // Generate the contents and check for the presence of a scheme. - QueryForInput(input, false, false); - AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); - EXPECT_EQ(url, match_inline.contents); -} - -// Verifies that "https://" is trimmed if the flag requests it, and -// nothing else would prevent it. -TEST_F(SearchProviderTest, DoTrimHttpsSchemeIfFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitAndEnableFeature( - omnibox::kUIExperimentHideSuggestionUrlScheme); - - const base::string16 input(ASCIIToUTF16("face book")); - const base::string16 url(ASCIIToUTF16("https://www.facebook.com")); - SearchSuggestionParser::NavigationResult result( - ChromeAutocompleteSchemeClassifier(&profile_), GURL(url), - AutocompleteMatchType::NAVSUGGEST, 0, base::string16(), std::string(), - false, 0, false, input); - - // Generate the contents and check for the presence of a scheme. - QueryForInput(input, false, false); - AutocompleteMatch match_inline(provider_->NavigationToMatch(result)); - EXPECT_EQ(ASCIIToUTF16("www.facebook.com"), match_inline.contents); -} - #if !defined(OS_WIN) // Verify entity suggestion parsing. TEST_F(SearchProviderTest, ParseEntitySuggestion) {
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 55e5e14..a3a4513 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc
@@ -1128,7 +1128,7 @@ content::ColorChooser* DevToolsWindow::OpenColorChooser( WebContents* web_contents, SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions) { + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) { return chrome::ShowColorChooser(web_contents, initial_color); }
diff --git a/chrome/browser/devtools/devtools_window.h b/chrome/browser/devtools/devtools_window.h index a12f2d54..7659ef7 100644 --- a/chrome/browser/devtools/devtools_window.h +++ b/chrome/browser/devtools/devtools_window.h
@@ -307,7 +307,8 @@ content::ColorChooser* OpenColorChooser( content::WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) override; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) + override; void RunFileChooser(content::RenderFrameHost* render_frame_host, const content::FileChooserParams& params) override; bool PreHandleGestureEvent(content::WebContents* source,
diff --git a/chrome/browser/extensions/extension_view_host.cc b/chrome/browser/extensions/extension_view_host.cc index ae20256a..16525738 100644 --- a/chrome/browser/extensions/extension_view_host.cc +++ b/chrome/browser/extensions/extension_view_host.cc
@@ -214,7 +214,7 @@ content::ColorChooser* ExtensionViewHost::OpenColorChooser( WebContents* web_contents, SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions) { + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) { // Similar to the file chooser below, opening a color chooser requires a // visible <input> element to click on. Therefore this code only exists for // extensions with a view.
diff --git a/chrome/browser/extensions/extension_view_host.h b/chrome/browser/extensions/extension_view_host.h index 59cb1b08..af9a69b 100644 --- a/chrome/browser/extensions/extension_view_host.h +++ b/chrome/browser/extensions/extension_view_host.h
@@ -79,7 +79,8 @@ content::ColorChooser* OpenColorChooser( content::WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) override; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) + override; void RunFileChooser(content::RenderFrameHost* render_frame_host, const content::FileChooserParams& params) override; void ResizeDueToAutoResize(content::WebContents* source,
diff --git a/chrome/browser/ui/app_list/custom_launcher_page_contents.cc b/chrome/browser/ui/app_list/custom_launcher_page_contents.cc index 352cbc4..7bfcac9f 100644 --- a/chrome/browser/ui/app_list/custom_launcher_page_contents.cc +++ b/chrome/browser/ui/app_list/custom_launcher_page_contents.cc
@@ -93,7 +93,7 @@ content::ColorChooser* CustomLauncherPageContents::OpenColorChooser( content::WebContents* web_contents, SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestionss) { + const std::vector<content::mojom::ColorSuggestionPtr>& suggestionss) { return app_delegate_->ShowColorChooser(web_contents, initial_color); }
diff --git a/chrome/browser/ui/app_list/custom_launcher_page_contents.h b/chrome/browser/ui/app_list/custom_launcher_page_contents.h index 3528de6..9fef271 100644 --- a/chrome/browser/ui/app_list/custom_launcher_page_contents.h +++ b/chrome/browser/ui/app_list/custom_launcher_page_contents.h
@@ -55,7 +55,8 @@ content::ColorChooser* OpenColorChooser( content::WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) override; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) + override; void RunFileChooser(content::RenderFrameHost* render_frame_host, const content::FileChooserParams& params) override; void RequestToLockMouse(content::WebContents* web_contents,
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 938fa9d..34dfc31 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -1700,9 +1700,9 @@ } content::ColorChooser* Browser::OpenColorChooser( - WebContents* web_contents, - SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions) { + WebContents* web_contents, + SkColor initial_color, + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) { return chrome::ShowColorChooser(web_contents, initial_color); }
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 5048162..c7b40094 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h
@@ -629,7 +629,8 @@ content::ColorChooser* OpenColorChooser( content::WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) override; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) + override; void RunFileChooser(content::RenderFrameHost* render_frame_host, const content::FileChooserParams& params) override; void EnumerateDirectory(content::WebContents* web_contents,
diff --git a/components/guest_view/browser/guest_view_base.cc b/components/guest_view/browser/guest_view_base.cc index e4bf514..e4cbdb2 100644 --- a/components/guest_view/browser/guest_view_base.cc +++ b/components/guest_view/browser/guest_view_base.cc
@@ -642,7 +642,7 @@ content::ColorChooser* GuestViewBase::OpenColorChooser( WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) { + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) { if (!attached() || !embedder_web_contents()->GetDelegate()) return nullptr;
diff --git a/components/guest_view/browser/guest_view_base.h b/components/guest_view/browser/guest_view_base.h index ae27d9f..c12f4dc4 100644 --- a/components/guest_view/browser/guest_view_base.h +++ b/components/guest_view/browser/guest_view_base.h
@@ -357,7 +357,7 @@ content::ColorChooser* OpenColorChooser( content::WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) final; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) final; void ResizeDueToAutoResize(content::WebContents* web_contents, const gfx::Size& new_size) final; void RunFileChooser(content::RenderFrameHost* render_frame_host,
diff --git a/components/omnibox/browser/history_quick_provider.cc b/components/omnibox/browser/history_quick_provider.cc index b88bcef2..e6810d4 100644 --- a/components/omnibox/browser/history_quick_provider.cc +++ b/components/omnibox/browser/history_quick_provider.cc
@@ -244,10 +244,9 @@ OffsetsFromTermMatches(history_match.url_matches); match.contents = url_formatter::FormatUrlWithOffsets( info.url(), - AutocompleteMatch::GetFormatTypes( - autocomplete_input_.parts().scheme.len > 0 || - history_match.match_in_scheme, - history_match.match_in_subdomain, history_match.match_after_host), + AutocompleteMatch::GetFormatTypes(history_match.match_in_scheme, + history_match.match_in_subdomain, + history_match.match_after_host), net::UnescapeRule::SPACES, nullptr, nullptr, &offsets); TermMatches new_matches =
diff --git a/components/omnibox/browser/history_quick_provider.h b/components/omnibox/browser/history_quick_provider.h index c93fb9e..2b1f0fcc 100644 --- a/components/omnibox/browser/history_quick_provider.h +++ b/components/omnibox/browser/history_quick_provider.h
@@ -41,15 +41,6 @@ friend class HistoryQuickProviderTest; FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Spans); FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Relevance); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, DoTrimHttpScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - DontTrimHttpSchemeIfInputHasScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - DontTrimHttpSchemeIfInputMatches); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, DontTrimHttpsScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - DontTrimHttpsSchemeDespiteFlag); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, DoTrimHttpsSchemeIfFlag); ~HistoryQuickProvider() override;
diff --git a/components/omnibox/browser/history_quick_provider_unittest.cc b/components/omnibox/browser/history_quick_provider_unittest.cc index 84ec7631..5811e04 100644 --- a/components/omnibox/browser/history_quick_provider_unittest.cc +++ b/components/omnibox/browser/history_quick_provider_unittest.cc
@@ -17,7 +17,6 @@ #include "base/macros.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/test/bookmark_test_helpers.h" @@ -748,103 +747,6 @@ EXPECT_TRUE(provider().matches().empty()); } -ScoredHistoryMatch BuildScoredHistoryMatch(const std::string& url_text) { - return ScoredHistoryMatch( - history::URLRow(GURL(url_text)), VisitInfoVector(), ASCIIToUTF16(""), - String16Vector(1, ASCIIToUTF16("")), WordStarts(1, 0), RowWordStarts(), - false, 0, base::Time()); -} - -// Trim the http:// scheme from the contents in the general case. -TEST_F(HistoryQuickProviderTest, DoTrimHttpScheme) { - AutocompleteInput input(ASCIIToUTF16("face"), - metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - provider().Start(input, false); - ScoredHistoryMatch history_match = - BuildScoredHistoryMatch("http://www.facebook.com"); - - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); - EXPECT_EQ(ASCIIToUTF16("www.facebook.com"), match.contents); -} - -// Don't trim the http:// scheme from the match contents if -// the user input included a scheme. -TEST_F(HistoryQuickProviderTest, DontTrimHttpSchemeIfInputHasScheme) { - AutocompleteInput input(ASCIIToUTF16("http://face"), - metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - provider().Start(input, false); - ScoredHistoryMatch history_match = - BuildScoredHistoryMatch("http://www.facebook.com"); - - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); - EXPECT_EQ(ASCIIToUTF16("http://www.facebook.com"), match.contents); -} - -// Don't trim the http:// scheme from the match contents if -// the user input matched it. -TEST_F(HistoryQuickProviderTest, DontTrimHttpSchemeIfInputMatches) { - AutocompleteInput input(ASCIIToUTF16("ht"), metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - provider().Start(input, false); - ScoredHistoryMatch history_match = - BuildScoredHistoryMatch("http://www.facebook.com"); - history_match.match_in_scheme = true; - - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); - EXPECT_EQ(ASCIIToUTF16("http://www.facebook.com"), match.contents); -} - -// Don't trim the https:// scheme from the match contents in the general case. -TEST_F(HistoryQuickProviderTest, DontTrimHttpsScheme) { - AutocompleteInput input(ASCIIToUTF16("face"), - metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - provider().Start(input, false); - ScoredHistoryMatch history_match = - BuildScoredHistoryMatch("https://www.facebook.com"); - - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); - EXPECT_EQ(ASCIIToUTF16("https://www.facebook.com"), match.contents); -} - -// Don't trim the https:// scheme from the match contents, if the feature -// to do so is enabled, if the user input included a scheme. -TEST_F(HistoryQuickProviderTest, DontTrimHttpsSchemeDespiteFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitAndEnableFeature( - omnibox::kUIExperimentHideSuggestionUrlScheme); - - AutocompleteInput input(ASCIIToUTF16("https://face"), - metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - provider().Start(input, false); - ScoredHistoryMatch history_match = - BuildScoredHistoryMatch("https://www.facebook.com"); - - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); - EXPECT_EQ(ASCIIToUTF16("https://www.facebook.com"), match.contents); -} - -// Trim the https:// scheme from the match contents, if the feature -// to do so is enabled, and nothing else prevents it. -TEST_F(HistoryQuickProviderTest, DoTrimHttpsSchemeIfFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitAndEnableFeature( - omnibox::kUIExperimentHideSuggestionUrlScheme); - - AutocompleteInput input(ASCIIToUTF16("face"), - metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - provider().Start(input, false); - ScoredHistoryMatch history_match = - BuildScoredHistoryMatch("https://www.facebook.com"); - - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); - EXPECT_EQ(ASCIIToUTF16("www.facebook.com"), match.contents); -} - // HQPOrderingTest ------------------------------------------------------------- class HQPOrderingTest : public HistoryQuickProviderTest {
diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc index 0bcd66d..d925450 100644 --- a/components/omnibox/browser/history_url_provider.cc +++ b/components/omnibox/browser/history_url_provider.cc
@@ -1226,8 +1226,7 @@ history_match.input_location + params.input.text().length()}; const auto format_types = AutocompleteMatch::GetFormatTypes( - params.input.parts().scheme.len > 0 || !params.trim_http || - history_match.match_in_scheme, + !params.trim_http || history_match.match_in_scheme, history_match.match_in_subdomain, history_match.match_after_host); match.contents = url_formatter::FormatUrlWithOffsets( info.url(), format_types, net::UnescapeRule::SPACES, nullptr, nullptr,
diff --git a/components/omnibox/browser/history_url_provider.h b/components/omnibox/browser/history_url_provider.h index df943c4..8498098 100644 --- a/components/omnibox/browser/history_url_provider.h +++ b/components/omnibox/browser/history_url_provider.h
@@ -221,15 +221,6 @@ private: FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, HUPScoringExperiment); - FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, DoTrimHttpScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, - DontTrimHttpSchemeIfInputHasScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, - DontTrimHttpSchemeIfInputMatchesInScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, DontTrimHttpsScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, - DontTrimHttpsSchemeDespiteFlag); - FRIEND_TEST_ALL_PREFIXES(HistoryURLProviderTest, DoTrimHttpsSchemeIfFlag); enum MatchType { NORMAL,
diff --git a/components/omnibox/browser/history_url_provider_unittest.cc b/components/omnibox/browser/history_url_provider_unittest.cc index 5b66e34..69c16ad 100644 --- a/components/omnibox/browser/history_url_provider_unittest.cc +++ b/components/omnibox/browser/history_url_provider_unittest.cc
@@ -1246,84 +1246,3 @@ omnibox::kUIExperimentElideSuggestionUrlAfterHost); ExpectFormattedFullMatch("hij", L"https://www.hij.com/\x2026\x0000", 12, 3); } - -std::unique_ptr<HistoryURLProviderParams> BuildHistoryURLProviderParams( - const std::string& input_text, - const std::string& url_text, - bool match_in_scheme) { - AutocompleteInput input(ASCIIToUTF16(input_text), - metrics::OmniboxEventProto::OTHER, - TestSchemeClassifier()); - history::HistoryMatch history_match; - history_match.url_info.set_url(GURL(url_text)); - history_match.match_in_scheme = match_in_scheme; - auto params = std::make_unique<HistoryURLProviderParams>( - input, true, AutocompleteMatch(), nullptr, SearchTermsData()); - params->matches.push_back(history_match); - - return params; -} - -// Make sure "http://" scheme is generally trimmed. -TEST_F(HistoryURLProviderTest, DoTrimHttpScheme) { - auto params = - BuildHistoryURLProviderParams("face", "http://www.facebook.com", false); - - AutocompleteMatch match = autocomplete_->HistoryMatchToACMatch(*params, 0, 0); - EXPECT_EQ(ASCIIToUTF16("www.facebook.com"), match.contents); -} - -// Make sure "http://" scheme is not trimmed if input has a scheme too. -TEST_F(HistoryURLProviderTest, DontTrimHttpSchemeIfInputHasScheme) { - auto params = BuildHistoryURLProviderParams("http://face", - "http://www.facebook.com", false); - - AutocompleteMatch match = autocomplete_->HistoryMatchToACMatch(*params, 0, 0); - EXPECT_EQ(ASCIIToUTF16("http://www.facebook.com"), match.contents); -} - -// Make sure "http://" scheme is not trimmed if input matches in scheme. -TEST_F(HistoryURLProviderTest, DontTrimHttpSchemeIfInputMatchesInScheme) { - auto params = - BuildHistoryURLProviderParams("ht face", "http://www.facebook.com", true); - - AutocompleteMatch match = autocomplete_->HistoryMatchToACMatch(*params, 0, 0); - EXPECT_EQ(ASCIIToUTF16("http://www.facebook.com"), match.contents); -} - -// Make sure "https://" scheme is generally not trimmed. -TEST_F(HistoryURLProviderTest, DontTrimHttpsScheme) { - auto params = - BuildHistoryURLProviderParams("face", "https://www.facebook.com", false); - - AutocompleteMatch match = autocomplete_->HistoryMatchToACMatch(*params, 0, 0); - EXPECT_EQ(ASCIIToUTF16("https://www.facebook.com"), match.contents); -} - -// Make sure "https://" scheme is not trimmed even when requested by flag -// if the input has a scheme. -TEST_F(HistoryURLProviderTest, DontTrimHttpsSchemeDespiteFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitWithFeatures( - {omnibox::kUIExperimentHideSuggestionUrlScheme}, {}); - - auto params = BuildHistoryURLProviderParams( - "https://face", "https://www.facebook.com", false); - - AutocompleteMatch match = autocomplete_->HistoryMatchToACMatch(*params, 0, 0); - EXPECT_EQ(ASCIIToUTF16("https://www.facebook.com"), match.contents); -} - -// Make sure "https://" scheme is trimmed if requested by flag, and nothing -// else prevents it. -TEST_F(HistoryURLProviderTest, DoTrimHttpsSchemeIfFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitWithFeatures( - {omnibox::kUIExperimentHideSuggestionUrlScheme}, {}); - - auto params = - BuildHistoryURLProviderParams("face", "https://www.facebook.com", false); - - AutocompleteMatch match = autocomplete_->HistoryMatchToACMatch(*params, 0, 0); - EXPECT_EQ(ASCIIToUTF16("www.facebook.com"), match.contents); -}
diff --git a/components/omnibox/browser/search_provider.h b/components/omnibox/browser/search_provider.h index 1802419..1012bb5 100644 --- a/components/omnibox/browser/search_provider.h +++ b/components/omnibox/browser/search_provider.h
@@ -98,12 +98,6 @@ FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, RemoveExtraAnswers); FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, DoesNotProvideOnFocus); FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SendsWarmUpRequestOnFocus); - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, DoTrimHttpScheme); - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, - DontTrimHttpSchemeIfInputHasScheme); - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, DontTrimHttpsScheme); - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, DontTrimHttpsSchemeDespiteFlag); - FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, DoTrimHttpsSchemeIfFlag); FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, ClearPrefetchedResults); FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, SetPrefetchQuery);
diff --git a/components/omnibox/browser/search_suggestion_parser.cc b/components/omnibox/browser/search_suggestion_parser.cc index 674e7d2..95a6031 100644 --- a/components/omnibox/browser/search_suggestion_parser.cc +++ b/components/omnibox/browser/search_suggestion_parser.cc
@@ -288,8 +288,7 @@ GURL(formatted_url_), {{match_start, match_start + input_text.length()}}, &match_in_scheme, &match_in_subdomain, &match_after_host); auto format_types = AutocompleteMatch::GetFormatTypes( - GURL(input_text).has_scheme() || match_in_scheme, match_in_subdomain, - match_after_host); + match_in_scheme, match_in_subdomain, match_after_host); base::string16 match_contents = url_formatter::FormatUrl(url_, format_types, net::UnescapeRule::SPACES,
diff --git a/components/omnibox/browser/titled_url_match_utils.cc b/components/omnibox/browser/titled_url_match_utils.cc index f567d1b3..08c6139 100644 --- a/components/omnibox/browser/titled_url_match_utils.cc +++ b/components/omnibox/browser/titled_url_match_utils.cc
@@ -79,8 +79,7 @@ url, titled_url_match.url_match_positions, &match_in_scheme, &match_in_subdomain, &match_after_host); auto format_types = AutocompleteMatch::GetFormatTypes( - input.parts().scheme.len > 0 || match_in_scheme, match_in_subdomain, - match_after_host); + match_in_scheme, match_in_subdomain, match_after_host); std::vector<size_t> offsets = TitledUrlMatch::OffsetsFromMatchPositions( titled_url_match.url_match_positions);
diff --git a/components/omnibox/browser/titled_url_match_utils_unittest.cc b/components/omnibox/browser/titled_url_match_utils_unittest.cc index 8976d6ac..4b5095d 100644 --- a/components/omnibox/browser/titled_url_match_utils_unittest.cc +++ b/components/omnibox/browser/titled_url_match_utils_unittest.cc
@@ -7,13 +7,11 @@ #include <memory> #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_feature_list.h" #include "components/bookmarks/browser/titled_url_match.h" #include "components/bookmarks/browser/titled_url_node.h" #include "components/omnibox/browser/autocomplete_input.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/autocomplete_provider.h" -#include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/browser/test_scheme_classifier.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/omnibox_event.pb.h" @@ -112,121 +110,6 @@ autocomplete_match.inline_autocompletion); } -AutocompleteMatch BuildTestAutocompleteMatch( - const std::string& input_text_s, - const GURL& match_url, - const bookmarks::TitledUrlMatch::MatchPositions& match_positions) { - base::string16 input_text(base::ASCIIToUTF16(input_text_s)); - base::string16 match_title(base::ASCIIToUTF16("The Facebook")); - AutocompleteMatchType::Type type = AutocompleteMatchType::BOOKMARK_TITLE; - int relevance = 123; - - MockTitledUrlNode node(match_title, match_url); - bookmarks::TitledUrlMatch titled_url_match; - titled_url_match.node = &node; - titled_url_match.title_match_positions = {{0, 3}}; - // Don't capture the scheme, so that it doesn't match. - titled_url_match.url_match_positions = match_positions; - - scoped_refptr<MockAutocompleteProvider> provider = - new MockAutocompleteProvider(AutocompleteProvider::Type::TYPE_BOOKMARK); - TestSchemeClassifier classifier; - AutocompleteInput input(input_text, metrics::OmniboxEventProto::NTP, - classifier); - const base::string16 fixed_up_input(input_text); - - return TitledUrlMatchToAutocompleteMatch(titled_url_match, type, relevance, - provider.get(), classifier, input, - fixed_up_input); -} - -TEST(TitledUrlMatchUtilsTest, DoTrimHttpScheme) { - GURL match_url("http://www.facebook.com/"); - AutocompleteMatch autocomplete_match = - BuildTestAutocompleteMatch("face", match_url, {{11, 15}}); - - ACMatchClassifications expected_contents_class = { - {0, ACMatchClassification::URL}, - {4, ACMatchClassification::URL | ACMatchClassification::MATCH}, - {8, ACMatchClassification::URL}, - }; - base::string16 expected_contents(base::ASCIIToUTF16("www.facebook.com")); - - EXPECT_EQ(match_url, autocomplete_match.destination_url); - EXPECT_EQ(expected_contents, autocomplete_match.contents); - EXPECT_TRUE(std::equal(expected_contents_class.begin(), - expected_contents_class.end(), - autocomplete_match.contents_class.begin())); - EXPECT_TRUE(autocomplete_match.allowed_to_be_default_match); -} - -TEST(TitledUrlMatchUtilsTest, DontTrimHttpSchemeIfInputHasScheme) { - GURL match_url("http://www.facebook.com/"); - AutocompleteMatch autocomplete_match = - BuildTestAutocompleteMatch("http://face", match_url, {{11, 15}}); - - ACMatchClassifications expected_contents_class = { - {0, ACMatchClassification::URL}, - {11, ACMatchClassification::URL | ACMatchClassification::MATCH}, - {15, ACMatchClassification::URL}, - }; - base::string16 expected_contents( - base::ASCIIToUTF16("http://www.facebook.com")); - - EXPECT_EQ(match_url, autocomplete_match.destination_url); - EXPECT_EQ(expected_contents, autocomplete_match.contents); - EXPECT_TRUE(std::equal(expected_contents_class.begin(), - expected_contents_class.end(), - autocomplete_match.contents_class.begin())); - EXPECT_FALSE(autocomplete_match.allowed_to_be_default_match); -} - -TEST(TitledUrlMatchUtilsTest, DontTrimHttpsScheme) { - GURL match_url("https://www.facebook.com/"); - AutocompleteMatch autocomplete_match = - BuildTestAutocompleteMatch("face", match_url, {{12, 16}}); - - ACMatchClassifications expected_contents_class = { - {0, ACMatchClassification::URL}, - {12, ACMatchClassification::URL | ACMatchClassification::MATCH}, - {16, ACMatchClassification::URL}, - }; - base::string16 expected_contents( - base::ASCIIToUTF16("https://www.facebook.com")); - - EXPECT_EQ(match_url, autocomplete_match.destination_url); - EXPECT_EQ(expected_contents, autocomplete_match.contents); - EXPECT_TRUE(std::equal(expected_contents_class.begin(), - expected_contents_class.end(), - autocomplete_match.contents_class.begin())); - EXPECT_TRUE(autocomplete_match.allowed_to_be_default_match); -} - -TEST(TitledUrlMatchUtilsTest, DontTrimHttpsSchemeDespiteFlag) { - auto feature_list = std::make_unique<base::test::ScopedFeatureList>(); - feature_list->InitAndEnableFeature( - omnibox::kUIExperimentHideSuggestionUrlScheme); - - GURL match_url("https://www.facebook.com/"); - AutocompleteMatch autocomplete_match = - BuildTestAutocompleteMatch("https://face", match_url, {{12, 16}}); - - ACMatchClassifications expected_contents_class = { - {0, ACMatchClassification::URL}, - {12, ACMatchClassification::URL | ACMatchClassification::MATCH}, - {16, ACMatchClassification::URL}, - }; - base::string16 expected_contents( - base::ASCIIToUTF16("https://www.facebook.com")); - - EXPECT_EQ(match_url, autocomplete_match.destination_url); - EXPECT_EQ(expected_contents, autocomplete_match.contents); - EXPECT_TRUE(std::equal(expected_contents_class.begin(), - expected_contents_class.end(), - autocomplete_match.contents_class.begin())); - EXPECT_FALSE(autocomplete_match.allowed_to_be_default_match); -} - TEST(TitledUrlMatchUtilsTest, EmptyInlineAutocompletion) { // The search term matches the title but not the URL. Since there is no URL // match, the inline autocompletion string will be empty.
diff --git a/components/web_contents_delegate_android/color_chooser_android.cc b/components/web_contents_delegate_android/color_chooser_android.cc index 4c31f39..42b6fe1 100644 --- a/components/web_contents_delegate_android/color_chooser_android.cc +++ b/components/web_contents_delegate_android/color_chooser_android.cc
@@ -9,11 +9,10 @@ #include "base/android/jni_array.h" #include "base/android/jni_string.h" #include "content/public/browser/web_contents.h" -#include "content/public/common/color_suggestion.h" #include "jni/ColorChooserAndroid_jni.h" #include "ui/android/window_android.h" -using base::android::ConvertUTF16ToJavaString; +using base::android::ConvertUTF8ToJavaString; using base::android::JavaRef; namespace web_contents_delegate_android { @@ -21,7 +20,7 @@ ColorChooserAndroid::ColorChooserAndroid( content::WebContents* web_contents, SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions) + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) : web_contents_(web_contents) { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobjectArray> suggestions_array; @@ -31,9 +30,9 @@ env, suggestions.size()); for (size_t i = 0; i < suggestions.size(); ++i) { - const content::ColorSuggestion& suggestion = suggestions[i]; - ScopedJavaLocalRef<jstring> label = ConvertUTF16ToJavaString( - env, suggestion.label); + const auto& suggestion = *suggestions[i]; + ScopedJavaLocalRef<jstring> label = + ConvertUTF8ToJavaString(env, suggestion.label); Java_ColorChooserAndroid_addToColorSuggestionArray( env, suggestions_array, i, suggestion.color, label); }
diff --git a/components/web_contents_delegate_android/color_chooser_android.h b/components/web_contents_delegate_android/color_chooser_android.h index f3a6e99..5432448 100644 --- a/components/web_contents_delegate_android/color_chooser_android.h +++ b/components/web_contents_delegate_android/color_chooser_android.h
@@ -12,13 +12,13 @@ #include "base/macros.h" #include "base/strings/string16.h" #include "content/public/browser/color_chooser.h" +#include "content/public/common/color_suggestion.mojom.h" using base::android::AttachCurrentThread; using base::android::ScopedJavaLocalRef; namespace content { class WebContents; -struct ColorSuggestion; } namespace web_contents_delegate_android { @@ -26,9 +26,10 @@ // Glues the Java (ColorPickerChooser.java) picker with the native part. class ColorChooserAndroid : public content::ColorChooser { public: - ColorChooserAndroid(content::WebContents* tab, - SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions); + ColorChooserAndroid( + content::WebContents* tab, + SkColor initial_color, + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions); ~ColorChooserAndroid() override; void OnColorChosen(JNIEnv* env,
diff --git a/components/web_contents_delegate_android/web_contents_delegate_android.cc b/components/web_contents_delegate_android/web_contents_delegate_android.cc index 65ffe50..f601cd2 100644 --- a/components/web_contents_delegate_android/web_contents_delegate_android.cc +++ b/components/web_contents_delegate_android/web_contents_delegate_android.cc
@@ -54,9 +54,9 @@ // ---------------------------------------------------------------------------- ColorChooser* WebContentsDelegateAndroid::OpenColorChooser( - WebContents* source, - SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) { + WebContents* source, + SkColor color, + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) { return new ColorChooserAndroid(source, color, suggestions); }
diff --git a/components/web_contents_delegate_android/web_contents_delegate_android.h b/components/web_contents_delegate_android/web_contents_delegate_android.h index 10f98037..99d7a4f 100644 --- a/components/web_contents_delegate_android/web_contents_delegate_android.h +++ b/components/web_contents_delegate_android/web_contents_delegate_android.h
@@ -53,7 +53,8 @@ content::ColorChooser* OpenColorChooser( content::WebContents* source, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) override; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) + override; void NavigationStateChanged(content::WebContents* source, content::InvalidateTypes changed_flags) override; void VisibleSecurityStateChanged(content::WebContents* source) override;
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index f22cf700..47657d0 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -393,26 +393,40 @@ DISALLOW_COPY_AND_ASSIGN(DestructionObserver); }; -WebContentsImpl::ColorChooserInfo::ColorChooserInfo(int render_process_id, - int render_frame_id, - ColorChooser* chooser, - int identifier) - : render_process_id(render_process_id), - render_frame_id(render_frame_id), - chooser(chooser), - identifier(identifier) { -} +// WebContentsImpl::ColorChooser ---------------------------------------------- +class WebContentsImpl::ColorChooser : public mojom::ColorChooser { + public: + ColorChooser(content::ColorChooser* chooser, + mojom::ColorChooserRequest request, + mojom::ColorChooserClientPtr client) + : chooser_(chooser), + binding_(this, std::move(request)), + client_(std::move(client)) { + binding_.set_connection_error_handler( + base::BindOnce([](content::ColorChooser* chooser) { chooser->End(); }, + base::Unretained(chooser))); + } -WebContentsImpl::ColorChooserInfo::~ColorChooserInfo() { -} + ~ColorChooser() override { chooser_->End(); } -bool WebContentsImpl::ColorChooserInfo::Matches( - RenderFrameHostImpl* render_frame_host, - int color_chooser_id) { - return this->render_process_id == render_frame_host->GetProcess()->GetID() && - this->render_frame_id == render_frame_host->GetRoutingID() && - this->identifier == color_chooser_id; -} + void SetSelectedColor(SkColor color) override { + chooser_->SetSelectedColor(color); + } + + void DidChooseColorInColorChooser(SkColor color) { + client_->DidChooseColor(color); + } + + private: + // Color chooser that was opened by this tab. + std::unique_ptr<content::ColorChooser> chooser_; + + // mojo bindings. + mojo::Binding<mojom::ColorChooser> binding_; + + // mojo renderer client. + content::mojom::ColorChooserClientPtr client_; +}; // WebContentsImpl::WebContentsTreeNode ---------------------------------------- WebContentsImpl::WebContentsTreeNode::WebContentsTreeNode( @@ -569,6 +583,9 @@ #if !defined(OS_ANDROID) host_zoom_map_observer_.reset(new HostZoomMapObserver(this)); #endif // !defined(OS_ANDROID) + + registry_.AddInterface(base::BindRepeating( + &WebContentsImpl::OnColorChooserFactoryRequest, base::Unretained(this))); } WebContentsImpl::~WebContentsImpl() { @@ -612,8 +629,7 @@ dialog_manager_->CancelDialogs(this, /*reset_state=*/true); } - if (color_chooser_info_.get()) - color_chooser_info_->chooser->End(); + color_chooser_.reset(); NotifyDisconnected(); @@ -837,10 +853,6 @@ IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishDocumentLoad, OnDocumentLoadedInFrame) IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishLoad, OnDidFinishLoad) - IPC_MESSAGE_HANDLER(FrameHostMsg_OpenColorChooser, OnOpenColorChooser) - IPC_MESSAGE_HANDLER(FrameHostMsg_EndColorChooser, OnEndColorChooser) - IPC_MESSAGE_HANDLER(FrameHostMsg_SetSelectedColorInColorChooser, - OnSetSelectedColorInColorChooser) IPC_MESSAGE_HANDLER(FrameHostMsg_DidLoadResourceFromMemoryCache, OnDidLoadResourceFromMemoryCache) IPC_MESSAGE_HANDLER(FrameHostMsg_DidDisplayInsecureContent, @@ -3513,30 +3525,11 @@ } void WebContentsImpl::DidChooseColorInColorChooser(SkColor color) { - if (!color_chooser_info_.get()) - return; - RenderFrameHost* rfh = RenderFrameHost::FromID( - color_chooser_info_->render_process_id, - color_chooser_info_->render_frame_id); - if (!rfh) - return; - - rfh->Send(new FrameMsg_DidChooseColorResponse( - rfh->GetRoutingID(), color_chooser_info_->identifier, color)); + color_chooser_->DidChooseColorInColorChooser(color); } void WebContentsImpl::DidEndColorChooser() { - if (!color_chooser_info_.get()) - return; - RenderFrameHost* rfh = RenderFrameHost::FromID( - color_chooser_info_->render_process_id, - color_chooser_info_->render_frame_id); - if (!rfh) - return; - - rfh->Send(new FrameMsg_DidEndColorChooser( - rfh->GetRoutingID(), color_chooser_info_->identifier)); - color_chooser_info_.reset(); + color_chooser_.reset(); } int WebContentsImpl::DownloadImage( @@ -4212,38 +4205,25 @@ observer.AppCacheAccessed(manifest_url, blocked_by_policy); } -void WebContentsImpl::OnOpenColorChooser( - RenderFrameHostImpl* source, - int color_chooser_id, +void WebContentsImpl::OnColorChooserFactoryRequest( + mojom::ColorChooserFactoryRequest request) { + color_chooser_factory_bindings_.AddBinding(this, std::move(request)); +} + +void WebContentsImpl::OpenColorChooser( + mojom::ColorChooserRequest chooser_request, + mojom::ColorChooserClientPtr client, SkColor color, - const std::vector<ColorSuggestion>& suggestions) { - ColorChooser* new_color_chooser = + std::vector<mojom::ColorSuggestionPtr> suggestions) { + content::ColorChooser* new_color_chooser = delegate_ ? delegate_->OpenColorChooser(this, color, suggestions) : nullptr; if (!new_color_chooser) return; - if (color_chooser_info_.get()) - color_chooser_info_->chooser->End(); - color_chooser_info_.reset(new ColorChooserInfo( - source->GetProcess()->GetID(), source->GetRoutingID(), new_color_chooser, - color_chooser_id)); -} - -void WebContentsImpl::OnEndColorChooser(RenderFrameHostImpl* source, - int color_chooser_id) { - if (color_chooser_info_ && - color_chooser_info_->Matches(source, color_chooser_id)) - color_chooser_info_->chooser->End(); -} - -void WebContentsImpl::OnSetSelectedColorInColorChooser( - RenderFrameHostImpl* source, - int color_chooser_id, - SkColor color) { - if (color_chooser_info_ && - color_chooser_info_->Matches(source, color_chooser_id)) - color_chooser_info_->chooser->SetSelectedColor(color); + color_chooser_.reset(); + color_chooser_ = std::make_unique<ColorChooser>( + new_color_chooser, std::move(chooser_request), std::move(client)); } #if BUILDFLAG(ENABLE_PLUGINS) @@ -4563,6 +4543,7 @@ RenderFrameHost* render_frame_host, const std::string& interface_name, mojo::ScopedMessagePipeHandle* interface_pipe) { + registry_.TryBindInterface(interface_name, interface_pipe); for (auto& observer : observers_) { observer.OnInterfaceRequestFromFrame(render_frame_host, interface_name, interface_pipe);
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index b4ca68a..f66256f 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -35,6 +35,7 @@ #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/render_widget_host_delegate.h" #include "content/browser/wake_lock/wake_lock_context_host.h" +#include "content/common/color_chooser.mojom.h" #include "content/common/content_export.h" #include "content/public/browser/color_chooser.h" #include "content/public/browser/download_url_parameters.h" @@ -96,7 +97,6 @@ class WebContentsView; class WebContentsViewDelegate; struct AXEventNotificationDetails; -struct ColorSuggestion; struct FaviconURL; struct LoadNotificationDetails; struct MHTMLGenerationParams; @@ -127,6 +127,7 @@ public RenderViewHostDelegate, public RenderWidgetHostDelegate, public RenderFrameHostManager::Delegate, + public mojom::ColorChooserFactory, public NotificationObserver, public NavigationControllerDelegate, public NavigatorDelegate { @@ -771,6 +772,15 @@ int GetOuterDelegateFrameTreeNodeId() override; RenderWidgetHostImpl* GetFullscreenRenderWidgetHost() const override; + // content::mojom::ColorChooserFactory --------------------------------------- + + void OnColorChooserFactoryRequest(mojom::ColorChooserFactoryRequest request); + void OpenColorChooser( + mojom::ColorChooserRequest chooser, + mojom::ColorChooserClientPtr client, + SkColor color, + std::vector<mojom::ColorSuggestionPtr> suggestions) override; + // NotificationObserver ------------------------------------------------------ void Observe(int type, @@ -1119,14 +1129,6 @@ void OnAppCacheAccessed(RenderViewHostImpl* source, const GURL& manifest_url, bool blocked_by_policy); - void OnOpenColorChooser(RenderFrameHostImpl* source, - int color_chooser_id, - SkColor color, - const std::vector<ColorSuggestion>& suggestions); - void OnEndColorChooser(RenderFrameHostImpl* source, int color_chooser_id); - void OnSetSelectedColorInColorChooser(RenderFrameHostImpl* source, - int color_chooser_id, - SkColor color); void OnUpdatePageImportanceSignals(RenderFrameHostImpl* source, const PageImportanceSignals& signals); #if BUILDFLAG(ENABLE_PLUGINS) @@ -1522,32 +1524,8 @@ #endif // Holds information about a current color chooser dialog, if one is visible. - struct ColorChooserInfo { - ColorChooserInfo(int render_process_id, - int render_frame_id, - ColorChooser* chooser, - int identifier); - ~ColorChooserInfo(); - - bool Matches(RenderFrameHostImpl* render_frame_host, int color_chooser_id); - - int render_process_id; - int render_frame_id; - - // Color chooser that was opened by this tab. - std::unique_ptr<ColorChooser> chooser; - - // A unique identifier for the current color chooser. Identifiers are - // unique across a renderer process. This avoids race conditions in - // synchronizing the browser and renderer processes. For example, if a - // renderer closes one chooser and opens another, and simultaneously the - // user picks a color in the first chooser, the IDs can be used to drop the - // "chose a color" message rather than erroneously tell the renderer that - // the user picked a color in the second chooser. - int identifier; - }; - - std::unique_ptr<ColorChooserInfo> color_chooser_info_; + class ColorChooser; + std::unique_ptr<ColorChooser> color_chooser_; // Manages the embedder state for browser plugins, if this WebContents is an // embedder; NULL otherwise. @@ -1603,6 +1581,10 @@ device::mojom::WakeLockPtr renderer_wake_lock_; + service_manager::BinderRegistry registry_; + + mojo::BindingSet<mojom::ColorChooserFactory> color_chooser_factory_bindings_; + #if defined(OS_ANDROID) std::unique_ptr<NFCHost> nfc_host_; #endif
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn index e6f70f0..e5d366fb 100644 --- a/content/common/BUILD.gn +++ b/content/common/BUILD.gn
@@ -544,6 +544,7 @@ "child_control.mojom", "child_memory_coordinator.mojom", "clipboard.mojom", + "color_chooser.mojom", "devtools.mojom", "field_trial_recorder.mojom", "file_utilities.mojom",
diff --git a/content/common/color_chooser.mojom b/content/common/color_chooser.mojom new file mode 100644 index 0000000..6e701fb --- /dev/null +++ b/content/common/color_chooser.mojom
@@ -0,0 +1,27 @@ +// Copyright 2017 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. + +module content.mojom; + +import "content/public/common/color_suggestion.mojom"; + +// A ColorChooser window is shown for <input type="color">. +interface ColorChooserFactory { + OpenColorChooser( + ColorChooser& chooser, + ColorChooserClient client, + uint32 color, + array<ColorSuggestion> suggestions); +}; + +interface ColorChooser { + // Notifies browser of the selected color. + SetSelectedColor(uint32 color); +}; + +interface ColorChooserClient { + // Notifies the renderer that the user selected a color. + DidChooseColor(uint32 color); +}; +
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 2f4e41d7..636f789 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -32,7 +32,6 @@ #include "content/common/navigation_gesture.h" #include "content/common/navigation_params.h" #include "content/common/savable_subframe.h" -#include "content/public/common/color_suggestion.h" #include "content/public/common/common_param_traits.h" #include "content/public/common/console_message_level.h" #include "content/public/common/context_menu_params.h" @@ -151,11 +150,6 @@ IPC_STRUCT_TRAITS_MEMBER(is_for_scroll_sequence) IPC_STRUCT_TRAITS_END() -IPC_STRUCT_TRAITS_BEGIN(content::ColorSuggestion) - IPC_STRUCT_TRAITS_MEMBER(color) - IPC_STRUCT_TRAITS_MEMBER(label) -IPC_STRUCT_TRAITS_END() - IPC_STRUCT_TRAITS_BEGIN(content::ContextMenuParams) IPC_STRUCT_TRAITS_MEMBER(media_type) IPC_STRUCT_TRAITS_MEMBER(x) @@ -830,12 +824,6 @@ IPC_MESSAGE_ROUTED1(FrameMsg_Reload, bool /* bypass_cache */) -// Notifies the color chooser client that the user selected a color. -IPC_MESSAGE_ROUTED2(FrameMsg_DidChooseColorResponse, unsigned, SkColor) - -// Notifies the color chooser client that the color chooser has ended. -IPC_MESSAGE_ROUTED1(FrameMsg_DidEndColorChooser, unsigned) - // Requests the corresponding RenderFrameProxy to be deleted and removed from // the frame tree. IPC_MESSAGE_ROUTED0(FrameMsg_DeleteProxy) @@ -1508,20 +1496,6 @@ bool /* out - success */, base::string16 /* out - This is ignored.*/) -// Asks the browser to open the color chooser. -IPC_MESSAGE_ROUTED3(FrameHostMsg_OpenColorChooser, - int /* id */, - SkColor /* color */, - std::vector<content::ColorSuggestion> /* suggestions */) - -// Asks the browser to end the color chooser. -IPC_MESSAGE_ROUTED1(FrameHostMsg_EndColorChooser, int /* id */) - -// Change the selected color in the color chooser. -IPC_MESSAGE_ROUTED2(FrameHostMsg_SetSelectedColorInColorChooser, - int /* id */, - SkColor /* color */) - // Notify browser the theme color has been changed. IPC_MESSAGE_ROUTED1(FrameHostMsg_DidChangeThemeColor, SkColor /* theme_color */)
diff --git a/content/public/app/mojo/content_browser_manifest.json b/content/public/app/mojo/content_browser_manifest.json index ed0ec71..b28c5e2 100644 --- a/content/public/app/mojo/content_browser_manifest.json +++ b/content/public/app/mojo/content_browser_manifest.json
@@ -141,6 +141,8 @@ // TODO(beng): figure out how to overlay test interfaces like this. "content::mojom::BrowserTarget", + "content::mojom::ColorChooserFactory", + // InputInjector is only exposed when gpu benchmarking is enabled. "content::mojom::InputInjector",
diff --git a/content/public/browser/web_contents_delegate.cc b/content/public/browser/web_contents_delegate.cc index 2ef566f7..62a674c1 100644 --- a/content/public/browser/web_contents_delegate.cc +++ b/content/public/browser/web_contents_delegate.cc
@@ -157,7 +157,7 @@ content::ColorChooser* WebContentsDelegate::OpenColorChooser( WebContents* web_contents, SkColor color, - const std::vector<ColorSuggestion>& suggestions) { + const std::vector<mojom::ColorSuggestionPtr>& suggestions) { return nullptr; }
diff --git a/content/public/browser/web_contents_delegate.h b/content/public/browser/web_contents_delegate.h index 37db677..0f7cd74 100644 --- a/content/public/browser/web_contents_delegate.h +++ b/content/public/browser/web_contents_delegate.h
@@ -18,6 +18,7 @@ #include "content/common/content_export.h" #include "content/public/browser/bluetooth_chooser.h" #include "content/public/browser/invalidate_type.h" +#include "content/public/common/color_suggestion.mojom.h" #include "content/public/common/media_stream_request.h" #include "content/public/common/previews_state.h" #include "content/public/common/window_container_type.mojom.h" @@ -48,7 +49,6 @@ class SiteInstance; class WebContents; class WebContentsImpl; -struct ColorSuggestion; struct ContextMenuParams; struct DropData; struct FileChooserParams; @@ -340,7 +340,7 @@ virtual ColorChooser* OpenColorChooser( WebContents* web_contents, SkColor color, - const std::vector<ColorSuggestion>& suggestions); + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions); // Called when a file selection is to be done. virtual void RunFileChooser(RenderFrameHost* render_frame_host,
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn index 46f2aef..bcd2ce0 100644 --- a/content/public/common/BUILD.gn +++ b/content/public/common/BUILD.gn
@@ -118,8 +118,6 @@ "child_process_host.h", "child_process_host_delegate.cc", "child_process_host_delegate.h", - "color_suggestion.cc", - "color_suggestion.h", "common_param_traits.cc", "common_param_traits.h", "common_param_traits_macros.h", @@ -359,6 +357,7 @@ sources = [ "appcache_info.mojom", + "color_suggestion.mojom", "download_stream.mojom", "network_service.mojom", "network_service_test.mojom",
diff --git a/content/public/common/color_suggestion.cc b/content/public/common/color_suggestion.cc deleted file mode 100644 index 807b4ac..0000000 --- a/content/public/common/color_suggestion.cc +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2013 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 "content/public/common/color_suggestion.h" - -namespace content { - -ColorSuggestion::ColorSuggestion(const SkColor& color, - const base::string16& label) - : color(color), label(label) {} - -} // namespace content
diff --git a/content/public/common/color_suggestion.h b/content/public/common/color_suggestion.h deleted file mode 100644 index d54143041..0000000 --- a/content/public/common/color_suggestion.h +++ /dev/null
@@ -1,26 +0,0 @@ -// Copyright 2013 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. - -#ifndef CONTENT_PUBLIC_COMMON_COLOR_SUGGESTION_H_ -#define CONTENT_PUBLIC_COMMON_COLOR_SUGGESTION_H_ - -#include "base/strings/string16.h" -#include "content/common/content_export.h" -#include "third_party/skia/include/core/SkColor.h" - -namespace content { - -// Container for information about datalist suggestion for the color input -// control. -struct CONTENT_EXPORT ColorSuggestion { - ColorSuggestion() {} - ColorSuggestion(const SkColor& color, const base::string16& label); - - SkColor color; - base::string16 label; -}; - -} // namespace content - -#endif // CONTENT_PUBLIC_COMMON_COLOR_SUGGESTION_H_
diff --git a/content/public/common/color_suggestion.mojom b/content/public/common/color_suggestion.mojom new file mode 100644 index 0000000..a7fe420 --- /dev/null +++ b/content/public/common/color_suggestion.mojom
@@ -0,0 +1,10 @@ +// Copyright 2017 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. + +module content.mojom; + +struct ColorSuggestion { + uint32 color; + string label; +};
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 9e7102b7..4e717e2 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -4427,12 +4427,14 @@ const blink::WebVector<blink::WebColorSuggestion>& suggestions) { RendererWebColorChooserImpl* color_chooser = new RendererWebColorChooserImpl(this, client); - std::vector<ColorSuggestion> color_suggestions; - for (size_t i = 0; i < suggestions.size(); i++) { - color_suggestions.push_back( - ColorSuggestion(suggestions[i].color, suggestions[i].label.Utf16())); + std::vector<mojom::ColorSuggestionPtr> color_suggestions; + color_suggestions.reserve(suggestions.size()); + for (const auto& suggestion : suggestions) { + color_suggestions.emplace_back(base::in_place, suggestion.color, + suggestion.label.Utf8()); } - color_chooser->Open(static_cast<SkColor>(initial_color), color_suggestions); + color_chooser->Open(static_cast<SkColor>(initial_color), + std::move(color_suggestions)); return color_chooser; }
diff --git a/content/renderer/renderer_webcolorchooser_impl.cc b/content/renderer/renderer_webcolorchooser_impl.cc index 98b16dd..c5128fa 100644 --- a/content/renderer/renderer_webcolorchooser_impl.cc +++ b/content/renderer/renderer_webcolorchooser_impl.cc
@@ -4,67 +4,48 @@ #include "content/renderer/renderer_webcolorchooser_impl.h" -#include "content/common/frame_messages.h" +#include "content/public/renderer/render_frame.h" +#include "services/service_manager/public/cpp/interface_provider.h" namespace content { -static int GenerateColorChooserIdentifier() { - static int next = 0; - return ++next; -} - RendererWebColorChooserImpl::RendererWebColorChooserImpl( RenderFrame* render_frame, - blink::WebColorChooserClient* client) + blink::WebColorChooserClient* blink_client) : RenderFrameObserver(render_frame), - identifier_(GenerateColorChooserIdentifier()), - client_(client) { + blink_client_(blink_client), + mojo_client_binding_(this) { + render_frame->GetRemoteInterfaces()->GetInterface(&color_chooser_factory_); } RendererWebColorChooserImpl::~RendererWebColorChooserImpl() { } -bool RendererWebColorChooserImpl::OnMessageReceived( - const IPC::Message& message) { - bool handled = true; - IPC_BEGIN_MESSAGE_MAP(RendererWebColorChooserImpl, message) - IPC_MESSAGE_HANDLER(FrameMsg_DidChooseColorResponse, - OnDidChooseColorResponse) - IPC_MESSAGE_HANDLER(FrameMsg_DidEndColorChooser, OnDidEndColorChooser) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP() - return handled; -} - void RendererWebColorChooserImpl::SetSelectedColor(blink::WebColor color) { - Send(new FrameHostMsg_SetSelectedColorInColorChooser( - routing_id(), identifier_, static_cast<SkColor>(color))); + color_chooser_->SetSelectedColor(color); } void RendererWebColorChooserImpl::EndChooser() { - Send(new FrameHostMsg_EndColorChooser(routing_id(), identifier_)); + color_chooser_.reset(); } void RendererWebColorChooserImpl::Open( - SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions) { - Send(new FrameHostMsg_OpenColorChooser(routing_id(), - identifier_, - initial_color, - suggestions)); + SkColor initial_color, + std::vector<mojom::ColorSuggestionPtr> suggestions) { + content::mojom::ColorChooserClientPtr mojo_client; + mojo_client_binding_.Bind(mojo::MakeRequest(&mojo_client)); + mojo_client_binding_.set_connection_error_handler(base::BindOnce( + [](blink::WebColorChooserClient* blink_client) { + blink_client->DidEndChooser(); + }, + base::Unretained(blink_client_))); + color_chooser_factory_->OpenColorChooser( + mojo::MakeRequest(&color_chooser_), std::move(mojo_client), initial_color, + std::move(suggestions)); } -void RendererWebColorChooserImpl::OnDidChooseColorResponse(int color_chooser_id, - SkColor color) { - DCHECK(identifier_ == color_chooser_id); - - client_->DidChooseColor(static_cast<blink::WebColor>(color)); -} - -void RendererWebColorChooserImpl::OnDidEndColorChooser(int color_chooser_id) { - if (identifier_ != color_chooser_id) - return; - client_->DidEndChooser(); +void RendererWebColorChooserImpl::DidChooseColor(SkColor color) { + blink_client_->DidChooseColor(static_cast<blink::WebColor>(color)); } } // namespace content
diff --git a/content/renderer/renderer_webcolorchooser_impl.h b/content/renderer/renderer_webcolorchooser_impl.h index 4c43934..240c08c4 100644 --- a/content/renderer/renderer_webcolorchooser_impl.h +++ b/content/renderer/renderer_webcolorchooser_impl.h
@@ -9,8 +9,9 @@ #include "base/compiler_specific.h" #include "base/macros.h" -#include "content/public/common/color_suggestion.h" +#include "content/common/color_chooser.mojom.h" #include "content/public/renderer/render_frame_observer.h" +#include "mojo/public/cpp/bindings/binding.h" #include "third_party/WebKit/public/web/WebColorChooser.h" #include "third_party/WebKit/public/web/WebColorChooserClient.h" #include "third_party/skia/include/core/SkColor.h" @@ -18,6 +19,7 @@ namespace content { class RendererWebColorChooserImpl : public blink::WebColorChooser, + public mojom::ColorChooserClient, public RenderFrameObserver { public: explicit RendererWebColorChooserImpl(RenderFrame* render_frame, @@ -29,9 +31,7 @@ void EndChooser() override; void Open(SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions); - - blink::WebColorChooserClient* client() { return client_; } + std::vector<mojom::ColorSuggestionPtr> suggestions); private: // RenderFrameObserver implementation: @@ -39,13 +39,14 @@ // away. RendererWebColorChooserImpl is owned by // blink::ColorChooserUIController. void OnDestruct() override {} - bool OnMessageReceived(const IPC::Message& message) override; - void OnDidChooseColorResponse(int color_chooser_id, SkColor color); - void OnDidEndColorChooser(int color_chooser_id); + // content::mojom::ColorChooserClient + void DidChooseColor(SkColor color) override; - int identifier_; - blink::WebColorChooserClient* client_; + blink::WebColorChooserClient* blink_client_; + mojom::ColorChooserFactoryPtr color_chooser_factory_; + mojom::ColorChooserPtr color_chooser_; + mojo::Binding<mojom::ColorChooserClient> mojo_client_binding_; DISALLOW_COPY_AND_ASSIGN(RendererWebColorChooserImpl); };
diff --git a/extensions/browser/app_window/app_window.cc b/extensions/browser/app_window/app_window.cc index 82538ac..a8d3d8b 100644 --- a/extensions/browser/app_window/app_window.cc +++ b/extensions/browser/app_window/app_window.cc
@@ -869,7 +869,7 @@ content::ColorChooser* AppWindow::OpenColorChooser( WebContents* web_contents, SkColor initial_color, - const std::vector<content::ColorSuggestion>& suggestions) { + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) { return app_delegate_->ShowColorChooser(web_contents, initial_color); }
diff --git a/extensions/browser/app_window/app_window.h b/extensions/browser/app_window/app_window.h index 66c0674..f554ec21f 100644 --- a/extensions/browser/app_window/app_window.h +++ b/extensions/browser/app_window/app_window.h
@@ -399,7 +399,8 @@ content::ColorChooser* OpenColorChooser( content::WebContents* web_contents, SkColor color, - const std::vector<content::ColorSuggestion>& suggestions) override; + const std::vector<content::mojom::ColorSuggestionPtr>& suggestions) + override; void RunFileChooser(content::RenderFrameHost* render_frame_host, const content::FileChooserParams& params) override; bool IsPopupOrPanel(const content::WebContents* source) const override;
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index 0831eed9..0363ecfb 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -751,9 +751,6 @@ // Returns the view to use when animating a page in or out, positioning it to // fill the content area but not actually adding it to the view hierarchy. - (UIImageView*)pageOpenCloseAnimationView; -// Returns the view to use when animating full screen NTP paper in, filling the -// entire screen but not actually adding it to the view hierarchy. -- (UIImageView*)pageFullScreenOpenCloseAnimationView; // Updates the toolbar display based on the current tab. - (void)updateToolbar; // Starts or stops broadcasting the toolbar UI and main content UI depending on @@ -1736,26 +1733,40 @@ self.inNewTabAnimation = YES; if (!inBackground) { UIView* animationParentView = _contentArea; - // Create the new page image, and load with the new tab page snapshot. + // Create the new page image, and load with the new tab snapshot except if + // it is the NTP. CGFloat newPageOffset = 0; - UIImageView* newPage; + UIView* newPage; + CGFloat offset = 0; if (tab.webState->GetLastCommittedURL() == kChromeUINewTabURL && !_isOffTheRecord && !IsIPadIdiom()) { + offset = 0; animationParentView = self.view; - newPage = [self pageFullScreenOpenCloseAnimationView]; + newPage = tab.view; + newPage.userInteractionEnabled = NO; + // Compute a frame for the new page by removing the status bar height from + // the bounds of |self.view|. + CGRect viewBounds, remainder; + CGRectDivide(self.view.bounds, &remainder, &viewBounds, StatusBarHeight(), + CGRectMinYEdge); + newPage.frame = viewBounds; } else { - newPage = [self pageOpenCloseAnimationView]; + UIImageView* pageScreenshot = [self pageOpenCloseAnimationView]; + tab.view.frame = _contentArea.bounds; + pageScreenshot.image = + [tab updateSnapshotWithOverlay:YES visibleFrameOnly:YES]; + newPage = pageScreenshot; + offset = + pageScreenshot.frame.size.height - pageScreenshot.image.size.height; } newPageOffset = newPage.frame.origin.y; - [tab view].frame = _contentArea.bounds; - newPage.image = [tab updateSnapshotWithOverlay:YES visibleFrameOnly:YES]; [animationParentView addSubview:newPage]; CGPoint origin = [self lastTapPoint]; page_animation_util::AnimateInPaperWithAnimationAndCompletion( - newPage, -newPageOffset, - newPage.frame.size.height - newPage.image.size.height, origin, - _isOffTheRecord, NULL, ^{ + newPage, -newPageOffset, offset, origin, _isOffTheRecord, NULL, ^{ + [tab view].frame = _contentArea.bounds; + newPage.userInteractionEnabled = YES; [newPage removeFromSuperview]; self.inNewTabAnimation = NO; // Use the model's currentTab here because it is possible that it can @@ -2496,13 +2507,6 @@ _expectingForegroundTab = YES; } -- (UIImageView*)pageFullScreenOpenCloseAnimationView { - CGRect viewBounds, remainder; - CGRectDivide(self.view.bounds, &remainder, &viewBounds, StatusBarHeight(), - CGRectMinYEdge); - return [[UIImageView alloc] initWithFrame:viewBounds]; -} - - (UIImageView*)pageOpenCloseAnimationView { CGRect frame = [_contentArea bounds];
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/resources/css.py b/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/resources/css.py index 7c4c63b5..55712c5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/resources/css.py +++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/resources/css.py
@@ -1,15 +1,23 @@ def main(request, response): - outcome = request.GET.first("outcome", "f") type = request.GET.first("type", None) + is_revalidation = request.headers.get("If-Modified-Since", None) content = "/* nothing to see here */" response.add_required_headers = False - response.writer.write_status(200) - response.writer.write_header("x-content-type-options", "nosniff") - response.writer.write_header("content-length", len(content)) - if(type != None): - response.writer.write_header("content-type", type) - response.writer.end_headers() - - response.writer.write(content) + if is_revalidation is not None: + response.writer.write_status(304) + response.writer.write_header("x-content-type-options", "nosniff") + response.writer.write_header("content-length", 0) + if(type != None): + response.writer.write_header("content-type", type) + response.writer.end_headers() + response.writer.write("") + else: + response.writer.write_status(200) + response.writer.write_header("x-content-type-options", "nosniff") + response.writer.write_header("content-length", len(content)) + if(type != None): + response.writer.write_header("content-type", type) + response.writer.end_headers() + response.writer.write(content)
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/stylesheet.html b/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/stylesheet.html index 9e47f757..3d3c9f08 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/stylesheet.html +++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/nosniff/stylesheet.html
@@ -18,21 +18,43 @@ async_test(function(t) { var link = document.createElement("link") link.rel = "stylesheet" - link.onerror = t.step_func_done(function(){}) + link.onerror = t.step_func_done() link.onload = t.unreached_func("Unexpected load event") link.href = get_url(mime) document.body.appendChild(link) }, "URL query: " + mime) }) + fails.forEach(function(mime) { + async_test(function(t) { + var link = document.createElement("link") + link.rel = "stylesheet" + link.onerror = t.step_func_done() + link.onload = t.unreached_func("Unexpected load event") + link.href = get_url(mime) + document.body.appendChild(link) + }, "Revalidated URL query: " + mime) + }) + + passes.forEach(function(mime) { + async_test(function(t) { + var link = document.createElement("link") + link.rel = "stylesheet" + link.onerror = t.unreached_func("Unexpected error event") + link.onload = t.step_func_done() + link.href = get_url(mime) + document.body.appendChild(link) + }, "URL query: " + mime) + }) + passes.forEach(function(mime) { async_test(function(t) { var link = document.createElement("link") link.rel = "stylesheet" link.onerror = t.unreached_func("Unexpected error event") - link.onload = t.step_func_done(function(){}) + link.onload = t.step_func_done() link.href = get_url(mime) document.body.appendChild(link) - }, "URL query: " + mime) + }, "Revalidated URL query: " + mime) }) </script>
diff --git a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp index 50c645a7..ce6213a 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
@@ -525,4 +525,102 @@ text2->GetLayoutObject()->Parent()); } +TEST_F(LayoutObjectTest, DisplayContentsWrapperInTable) { + SetBodyInnerHTML(R"HTML( + <div id='table' style='display:table'> + <div id='none' style='display:none'></div> + <div id='contents' style='display:contents;color:green'>Green</div> + </div> + )HTML"); + + Element* none = GetDocument().getElementById("none"); + Element* contents = GetDocument().getElementById("contents"); + + ExpectAnonymousInlineWrapperFor<true>(contents->firstChild()); + + none->SetInlineStyleProperty(CSSPropertyDisplay, "inline"); + GetDocument().View()->UpdateAllLifecyclePhases(); + ASSERT_TRUE(none->GetLayoutObject()); + LayoutObject* inline_parent = none->GetLayoutObject()->Parent(); + ASSERT_TRUE(inline_parent); + LayoutObject* wrapper_parent = + contents->firstChild()->GetLayoutObject()->Parent()->Parent(); + ASSERT_TRUE(wrapper_parent); + EXPECT_EQ(wrapper_parent, inline_parent); + EXPECT_TRUE(inline_parent->IsTableCell()); + EXPECT_TRUE(inline_parent->IsAnonymous()); +} + +TEST_F(LayoutObjectTest, DisplayContentsWrapperInTableSection) { + SetBodyInnerHTML(R"HTML( + <div id='section' style='display:table-row-group'> + <div id='none' style='display:none'></div> + <div id='contents' style='display:contents;color:green'>Green</div> + </div> + )HTML"); + + Element* none = GetDocument().getElementById("none"); + Element* contents = GetDocument().getElementById("contents"); + + ExpectAnonymousInlineWrapperFor<true>(contents->firstChild()); + + none->SetInlineStyleProperty(CSSPropertyDisplay, "inline"); + GetDocument().View()->UpdateAllLifecyclePhases(); + ASSERT_TRUE(none->GetLayoutObject()); + LayoutObject* inline_parent = none->GetLayoutObject()->Parent(); + ASSERT_TRUE(inline_parent); + LayoutObject* wrapper_parent = + contents->firstChild()->GetLayoutObject()->Parent()->Parent(); + ASSERT_TRUE(wrapper_parent); + EXPECT_EQ(wrapper_parent, inline_parent); + EXPECT_TRUE(inline_parent->IsTableCell()); + EXPECT_TRUE(inline_parent->IsAnonymous()); +} + +TEST_F(LayoutObjectTest, DisplayContentsWrapperInTableRow) { + SetBodyInnerHTML(R"HTML( + <div id='row' style='display:table-row'> + <div id='none' style='display:none'></div> + <div id='contents' style='display:contents;color:green'>Green</div> + </div> + )HTML"); + + Element* none = GetDocument().getElementById("none"); + Element* contents = GetDocument().getElementById("contents"); + + ExpectAnonymousInlineWrapperFor<true>(contents->firstChild()); + + none->SetInlineStyleProperty(CSSPropertyDisplay, "inline"); + GetDocument().View()->UpdateAllLifecyclePhases(); + ASSERT_TRUE(none->GetLayoutObject()); + LayoutObject* inline_parent = none->GetLayoutObject()->Parent(); + ASSERT_TRUE(inline_parent); + LayoutObject* wrapper_parent = + contents->firstChild()->GetLayoutObject()->Parent()->Parent(); + ASSERT_TRUE(wrapper_parent); + EXPECT_EQ(wrapper_parent, inline_parent); + EXPECT_TRUE(inline_parent->IsTableCell()); + EXPECT_TRUE(inline_parent->IsAnonymous()); +} + +TEST_F(LayoutObjectTest, DisplayContentsWrapperInTableCell) { + SetBodyInnerHTML(R"HTML( + <div id='cell' style='display:table-cell'> + <div id='none' style='display:none'></div> + <div id='contents' style='display:contents;color:green'>Green</div> + </div> + )HTML"); + + Element* cell = GetDocument().getElementById("cell"); + Element* none = GetDocument().getElementById("none"); + Element* contents = GetDocument().getElementById("contents"); + + ExpectAnonymousInlineWrapperFor<true>(contents->firstChild()); + + none->SetInlineStyleProperty(CSSPropertyDisplay, "inline"); + GetDocument().View()->UpdateAllLifecyclePhases(); + ASSERT_TRUE(none->GetLayoutObject()); + EXPECT_EQ(cell->GetLayoutObject(), none->GetLayoutObject()->Parent()); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.cpp b/third_party/WebKit/Source/core/layout/LayoutTable.cpp index 31961886..0716a70 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
@@ -215,7 +215,8 @@ while (last_box && last_box->Parent()->IsAnonymous() && !last_box->IsTableSection() && NeedsTableSection(last_box)) last_box = last_box->Parent(); - if (last_box && last_box->IsAnonymous() && !IsAfterContent(last_box)) { + if (last_box && last_box->IsAnonymous() && last_box->IsTablePart() && + !IsAfterContent(last_box)) { if (before_child == last_box) before_child = last_box->SlowFirstChild(); last_box->AddChild(child, before_child);
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp index feaad32..652c7f0 100644 --- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
@@ -144,7 +144,8 @@ LayoutObject* last = before_child; if (!last) last = LastRow(); - if (last && last->IsAnonymous() && !last->IsBeforeOrAfterContent()) { + if (last && last->IsAnonymous() && last->IsTablePart() && + !last->IsBeforeOrAfterContent()) { if (before_child == last) before_child = last->SlowFirstChild(); last->AddChild(child, before_child);
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp index da797cd..dac57ba 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceLoader.cpp
@@ -507,8 +507,14 @@ StringBuilder cors_error_msg; resource_->SetCORSStatus(DetermineCORSStatus(response, cors_error_msg)); + // Perform 'nosniff' checks against the original response instead of the 304 + // response for a successful revalidation. + const ResourceResponse& nosniffed_response = + (resource_->IsCacheValidator() && response.HttpStatusCode() == 304) + ? resource_->GetResponse() + : response; ResourceRequestBlockedReason blocked_reason = - Context().CheckResponseNosniff(request_context, response); + Context().CheckResponseNosniff(request_context, nosniffed_response); if (blocked_reason != ResourceRequestBlockedReason::kNone) { HandleError(ResourceError::CancelledDueToAccessCheckError(response.Url(), blocked_reason));