diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc index a3bd8fe..552d77cd 100644 --- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc +++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -79,8 +79,9 @@ ui::DomCode code, int ui_flags, // ui::EventFlags ui::DomKey key) { - const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, - ui::EventTimeForNow()); + ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, + ui::EventTimeForNow()); + event.set_source_device_id(kKeyboardDeviceId); std::unique_ptr<ui::Event> new_event; rewriter->RewriteEvent(event, &new_event); if (new_event) @@ -1747,6 +1748,168 @@ CheckKeyTestCase(rewriter_, test); } +TEST_F(EventRewriterTest, TestRewriteFunctionKeysLayout2) { + chromeos::Preferences::RegisterProfilePrefs(prefs()->registry()); + rewriter_->KeyboardDeviceAddedForTesting( + kKeyboardDeviceId, "PC Keyboard", + ui::EventRewriterChromeOS::kKbdTopRowLayout2); + + KeyTestCase tests[] = { + // F1 -> Back + {ui::ET_KEY_PRESSED, + {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}, + {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE, + ui::DomKey::BROWSER_BACK}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1}, + {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_CONTROL_DOWN, + ui::DomKey::BROWSER_BACK}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1}, + {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_ALT_DOWN, + ui::DomKey::BROWSER_BACK}}, + // F2 -> Refresh + {ui::ET_KEY_PRESSED, + {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}, + {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_NONE, + ui::DomKey::BROWSER_REFRESH}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2}, + {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, + ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_REFRESH}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2}, + {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_ALT_DOWN, + ui::DomKey::BROWSER_REFRESH}}, + // F3 -> Launch App 2 + {ui::ET_KEY_PRESSED, + {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}, + {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_NONE, + ui::DomKey::ZOOM_TOGGLE}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3}, + {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, + ui::EF_CONTROL_DOWN, ui::DomKey::ZOOM_TOGGLE}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3}, + {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_ALT_DOWN, + ui::DomKey::ZOOM_TOGGLE}}, + // F4 -> Launch App 1 + {ui::ET_KEY_PRESSED, + {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}, + {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_NONE, + ui::DomKey::LAUNCH_MY_COMPUTER}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4}, + {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, + ui::EF_CONTROL_DOWN, ui::DomKey::LAUNCH_MY_COMPUTER}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4}, + {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_ALT_DOWN, + ui::DomKey::LAUNCH_MY_COMPUTER}}, + // F5 -> Brightness down + {ui::ET_KEY_PRESSED, + {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}, + {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_NONE, + ui::DomKey::BRIGHTNESS_DOWN}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5}, + {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, + ui::EF_CONTROL_DOWN, ui::DomKey::BRIGHTNESS_DOWN}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5}, + {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_ALT_DOWN, + ui::DomKey::BRIGHTNESS_DOWN}}, + // F6 -> Brightness up + {ui::ET_KEY_PRESSED, + {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}, + {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_NONE, + ui::DomKey::BRIGHTNESS_UP}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6}, + {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_CONTROL_DOWN, + ui::DomKey::BRIGHTNESS_UP}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6}, + {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_ALT_DOWN, + ui::DomKey::BRIGHTNESS_UP}}, + // F7 -> Media Play/Pause + {ui::ET_KEY_PRESSED, + {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}, + {ui::VKEY_MEDIA_PLAY_PAUSE, ui::DomCode::MEDIA_PLAY_PAUSE, ui::EF_NONE, + ui::DomKey::MEDIA_PLAY_PAUSE}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7}, + {ui::VKEY_MEDIA_PLAY_PAUSE, ui::DomCode::MEDIA_PLAY_PAUSE, + ui::EF_CONTROL_DOWN, ui::DomKey::MEDIA_PLAY_PAUSE}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7}, + {ui::VKEY_MEDIA_PLAY_PAUSE, ui::DomCode::MEDIA_PLAY_PAUSE, + ui::EF_ALT_DOWN, ui::DomKey::MEDIA_PLAY_PAUSE}}, + // F8 -> Volume Mute + {ui::ET_KEY_PRESSED, + {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}, + {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_NONE, + ui::DomKey::AUDIO_VOLUME_MUTE}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8}, + {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_CONTROL_DOWN, + ui::DomKey::AUDIO_VOLUME_MUTE}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8}, + {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_ALT_DOWN, + ui::DomKey::AUDIO_VOLUME_MUTE}}, + // F9 -> Volume Down + {ui::ET_KEY_PRESSED, + {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}, + {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_NONE, + ui::DomKey::AUDIO_VOLUME_DOWN}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9}, + {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_CONTROL_DOWN, + ui::DomKey::AUDIO_VOLUME_DOWN}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9}, + {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_ALT_DOWN, + ui::DomKey::AUDIO_VOLUME_DOWN}}, + // F10 -> Volume Up + {ui::ET_KEY_PRESSED, + {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}, + {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_NONE, + ui::DomKey::AUDIO_VOLUME_UP}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F10, ui::DomCode::F10, ui::EF_CONTROL_DOWN, ui::DomKey::F10}, + {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_CONTROL_DOWN, + ui::DomKey::AUDIO_VOLUME_UP}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10}, + {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_ALT_DOWN, + ui::DomKey::AUDIO_VOLUME_UP}}, + // F11 -> F11 + {ui::ET_KEY_PRESSED, + {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}, + {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}, + {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}, + {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}}, + // F12 -> F12 + {ui::ET_KEY_PRESSED, + {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}, + {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}, + {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}}, + {ui::ET_KEY_PRESSED, + {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}, + {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}}}; + + for (const auto& test : tests) + CheckKeyTestCase(rewriter_, test); +} + TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { // Remap Search to Control. chromeos::Preferences::RegisterProfilePrefs(prefs()->registry());
diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc index aca92459..0c3bbf6 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc +++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
@@ -2152,9 +2152,6 @@ // START: These tests use SafeBrowsingService::Client to directly interact with // SafeBrowsingService. /////////////////////////////////////////////////////////////////////////////// -#if defined(GOOGLE_CHROME_BUILD) -// This test is only enabled when GOOGLE_CHROME_BUILD is true because the store -// that this test uses is only populated on GOOGLE_CHROME_BUILD builds. IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckDownloadUrl) { GURL badbin_url = embedded_test_server()->GetURL(kMalwareFile); std::vector<GURL> badbin_urls(1, badbin_url); @@ -2172,7 +2169,6 @@ // Now, the badbin_url is not safe since it is added to download database. EXPECT_EQ(SB_THREAT_TYPE_URL_BINARY_MALWARE, client->GetThreatType()); } -#endif // defined(GOOGLE_CHROME_BUILD) IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckUnwantedSoftwareUrl) { const GURL bad_url = embedded_test_server()->GetURL(kMalwareFile); @@ -2306,9 +2302,6 @@ EXPECT_FALSE(got_hit_report()); } -#if defined(GOOGLE_CHROME_BUILD) -// This test is only enabled when GOOGLE_CHROME_BUILD is true because the store -// that this test uses is only populated on GOOGLE_CHROME_BUILD builds. IN_PROC_BROWSER_TEST_F(V4SafeBrowsingServiceTest, CheckDownloadUrlRedirects) { GURL original_url = embedded_test_server()->GetURL(kEmptyPage); GURL badbin_url = embedded_test_server()->GetURL(kMalwareFile); @@ -2331,7 +2324,6 @@ // Now, the badbin_url is not safe since it is added to download database. EXPECT_EQ(SB_THREAT_TYPE_URL_BINARY_MALWARE, client->GetThreatType()); } -#endif // defined(GOOGLE_CHROME_BUILD) #if defined(GOOGLE_CHROME_BUILD) // This test is only enabled when GOOGLE_CHROME_BUILD is true because the store
diff --git a/components/safe_browsing_db/v4_local_database_manager.cc b/components/safe_browsing_db/v4_local_database_manager.cc index 101a24c..326ed5b 100644 --- a/components/safe_browsing_db/v4_local_database_manager.cc +++ b/components/safe_browsing_db/v4_local_database_manager.cc
@@ -71,9 +71,7 @@ SB_THREAT_TYPE_URL_MALWARE), ListInfo(kSyncAlways, "UrlUws.store", GetUrlUwsId(), SB_THREAT_TYPE_URL_UNWANTED), - // The GetUrlMalBinId list is not working for non-GoogleChrome builds - // currently so making it Chrome-only. See: http://crbug.com/728757 - ListInfo(kSyncOnlyOnChromeBuilds, "UrlMalBin.store", GetUrlMalBinId(), + ListInfo(kSyncAlways, "UrlMalBin.store", GetUrlMalBinId(), SB_THREAT_TYPE_URL_BINARY_MALWARE), ListInfo(kSyncAlways, "ChromeExtMalware.store", GetChromeExtMalwareId(), SB_THREAT_TYPE_EXTENSION),
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 8487a0b7..4d1ff44 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2804,67 +2804,68 @@ crbug.com/739559 virtual/gpu-rasterization/images/cross-fade-tiled.html [ Failure Pass ] # These tests are failing on Mac-10.12 when using an Intel GPU. -crbug.com/736177 [ Mac ] css2.1/t1202-counter-04-b.html [ Failure Pass ] -crbug.com/736177 [ Mac ] css2.1/t1202-counters-04-b.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/block/basic/001.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/block/float/intruding-painted-twice.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/borders/inline-mask-overlay-image-outset.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css-generated-content/012.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css-generated-content/014.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css/acid2-pixel.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css/clip-zooming.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css/h1-in-section-elements.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css/rem-calc-dynamic-scaling.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/css/rem-dynamic-scaling.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/dom/HTMLMeterElement/meter-optimums.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/dynamic/012.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/forms/form-element-geometry.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/inline/absolute-positioned-inline-in-centred-block.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/lists/ordered-list-with-no-ol-tag.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/selectors/166.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/text/color-emoji.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/text/emoticons.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/text/fallback-traits-fixup.html [ Failure Pass ] -crbug.com/736177 [ Mac ] fast/text/unicode-fallback-font.html [ Failure Pass ] -crbug.com/736177 [ Mac ] html/details_summary/details-marker-style.html [ Failure Pass ] -crbug.com/736177 [ Mac ] http/tests/misc/acid2-pixel.html [ Failure Pass ] -crbug.com/736177 [ Mac ] media/video-zoom-controls.html [ Failure Pass ] -crbug.com/736177 [ Mac ] paint/spellmarkers/document-markers-zoom-150.html [ Failure Pass ] -crbug.com/736177 [ Mac ] scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/W3C-SVG-1.1/script-handle-02-b.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/W3C-SVG-1.1/script-handle-03-b.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/W3C-SVG-1.1/script-handle-04-b.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/W3C-SVG-1.1/struct-use-05-b.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/as-border-image/svg-as-border-image-2.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] css2.1/t1202-counter-04-b.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] css2.1/t1202-counters-04-b.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/block/basic/001.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/block/float/intruding-painted-twice.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/borders/inline-mask-overlay-image-outset.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css-generated-content/012.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css-generated-content/014.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css/acid2-pixel.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css/clip-zooming.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css/h1-in-section-elements.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css/rem-calc-dynamic-scaling.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/css/rem-dynamic-scaling.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/dom/HTMLMeterElement/meter-optimums.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/dynamic/012.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/forms/form-element-geometry.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/inline/absolute-positioned-inline-in-centred-block.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/inline/left-right-center-inline-alignment-in-ltr-and-rtl-blocks.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/lists/ordered-list-with-no-ol-tag.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/selectors/166.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/text/color-emoji.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/text/emoticons.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/text/fallback-traits-fixup.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] fast/text/unicode-fallback-font.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] html/details_summary/details-marker-style.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] http/tests/misc/acid2-pixel.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] media/video-zoom-controls.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] paint/spellmarkers/document-markers-zoom-150.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/W3C-SVG-1.1/script-handle-02-b.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/W3C-SVG-1.1/script-handle-03-b.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/W3C-SVG-1.1/script-handle-04-b.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/W3C-SVG-1.1/struct-use-05-b.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/W3C-SVG-1.1/text-fonts-01-t.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/as-border-image/svg-as-border-image-2.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/batik/text/textLayout.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/custom/focus-ring-text.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/text/surrogate-pair-queries.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/text/text-path-middle-align.svg [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/transforms/svg-css-transforms-clip-path.xhtml [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] svg/transforms/svg-css-transforms.xhtml [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug18359.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug2479-3.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug2479-4.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug46480-1.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug46480-2.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug8032-1.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/bugs/bug8858.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/other/test3.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/other/test6.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/other/wa_table_thtd_rowspan.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla/other/wa_table_tr_align.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla_expected_failures/bugs/bug1128.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] tables/mozilla_expected_failures/bugs/bug91057.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] transforms/svg-vs-css.xhtml [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] virtual/layout_ng/fast/block/basic/001.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] virtual/mojo-loading/http/tests/misc/acid2-pixel.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] virtual/off-main-thread-fetch/http/tests/misc/acid2-pixel.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure Pass ] +crbug.com/736177 [ Mac10.12 ] virtual/rootlayerscrolls/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure Pass ] + crbug.com/736177 [ Mac ] svg/as-border-image/svg-as-border-image.html [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/batik/text/textLayout.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/custom/focus-ring-text.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/text/surrogate-pair-queries.html [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/text/text-path-middle-align.svg [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/transforms/svg-css-transforms-clip-path.xhtml [ Failure Pass ] -crbug.com/736177 [ Mac ] svg/transforms/svg-css-transforms.xhtml [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug18359.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug2479-3.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug2479-4.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug46480-1.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug46480-2.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug8032-1.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/bugs/bug8858.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/other/test3.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/other/test6.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/other/wa_table_thtd_rowspan.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla/other/wa_table_tr_align.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla_expected_failures/bugs/bug1128.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla_expected_failures/bugs/bug2479-5.html [ Failure Pass ] -crbug.com/736177 [ Mac ] tables/mozilla_expected_failures/bugs/bug91057.html [ Failure Pass ] -crbug.com/736177 [ Mac ] transforms/svg-vs-css.xhtml [ Failure Pass ] -crbug.com/736177 [ Mac ] virtual/layout_ng/fast/block/basic/001.html [ Failure Pass ] -crbug.com/736177 [ Mac ] virtual/mojo-loading/http/tests/misc/acid2-pixel.html [ Failure Pass ] -crbug.com/736177 [ Mac ] virtual/off-main-thread-fetch/http/tests/misc/acid2-pixel.html [ Failure Pass ] -crbug.com/736177 [ Mac ] virtual/prefer_compositing_to_lcd_text/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure Pass ] -crbug.com/736177 [ Mac ] virtual/rootlayerscrolls/scrollbars/custom-scrollbar-with-incomplete-style.html [ Failure Pass ] crbug.com/734762 [ Mac Debug ] inspector-protocol/timeline/page-frames.js [ Failure ]
diff --git a/ui/chromeos/DEPS b/ui/chromeos/DEPS index fa5a34e..2fcd209b 100644 --- a/ui/chromeos/DEPS +++ b/ui/chromeos/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+chromeos", "+components/device_event_log", + "+device/udev_linux", "+grit/ui_chromeos_resources.h", "+grit/ui_chromeos_strings.h", "+third_party/cros_system_api", @@ -22,4 +23,4 @@ "run_all_unittests\.cc": [ "+mojo/edk/embedder", ] -} \ No newline at end of file +}
diff --git a/ui/chromeos/events/BUILD.gn b/ui/chromeos/events/BUILD.gn index 79de0e15..ef1d1af5 100644 --- a/ui/chromeos/events/BUILD.gn +++ b/ui/chromeos/events/BUILD.gn
@@ -18,6 +18,7 @@ deps = [ "//base", "//chromeos", + "//device/udev_linux", "//ui/base/ime", "//ui/events", "//ui/events:dom_keycode_converter",
diff --git a/ui/chromeos/events/event_rewriter_chromeos.cc b/ui/chromeos/events/event_rewriter_chromeos.cc index 5366c600..f2c7f453 100644 --- a/ui/chromeos/events/event_rewriter_chromeos.cc +++ b/ui/chromeos/events/event_rewriter_chromeos.cc
@@ -12,10 +12,12 @@ #include "base/logging.h" #include "base/macros.h" #include "base/memory/ptr_util.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/sys_info.h" #include "chromeos/chromeos_switches.h" +#include "device/udev_linux/scoped_udev.h" #include "ui/base/ime/chromeos/ime_keyboard.h" #include "ui/base/ime/chromeos/input_method_manager.h" #include "ui/chromeos/events/pref_names.h" @@ -184,6 +186,37 @@ return EventRewriterChromeOS::kDeviceUnknown; } +EventRewriterChromeOS::KeyboardTopRowLayout GetKeyboardTopRowLayout( + const base::FilePath& device_path) { + device::ScopedUdevPtr udev(device::udev_new()); + if (!udev.get()) + return EventRewriterChromeOS::kKbdTopRowLayoutDefault; + + device::ScopedUdevDevicePtr device(device::udev_device_new_from_syspath( + udev.get(), device_path.value().c_str())); + if (!device.get()) + return EventRewriterChromeOS::kKbdTopRowLayoutDefault; + + const char kLayoutProperty[] = "CROS_KEYBOARD_TOP_ROW_LAYOUT"; + std::string layout = + device::UdevDeviceGetPropertyValue(device.get(), kLayoutProperty); + if (layout.empty()) + return EventRewriterChromeOS::kKbdTopRowLayoutDefault; + + int layout_id; + if (!base::StringToInt(layout, &layout_id)) { + LOG(WARNING) << "Failed to parse " << kLayoutProperty << " value '" + << layout << "'"; + return EventRewriterChromeOS::kKbdTopRowLayoutDefault; + } + if (layout_id < EventRewriterChromeOS::kKbdTopRowLayoutMin || + layout_id > EventRewriterChromeOS::kKbdTopRowLayoutMax) { + LOG(WARNING) << "Invalid " << kLayoutProperty << " '" << layout << "'"; + return EventRewriterChromeOS::kKbdTopRowLayoutDefault; + } + return static_cast<EventRewriterChromeOS::KeyboardTopRowLayout>(layout_id); +} + struct KeyboardRemapping { // MatchKeyboardRemapping() succeeds if the tested has all of the specified // flags (and possibly other flags), and either the key_code matches or the @@ -286,11 +319,12 @@ EventRewriterChromeOS::DeviceType EventRewriterChromeOS::KeyboardDeviceAddedForTesting( int device_id, - const std::string& device_name) { + const std::string& device_name, + KeyboardTopRowLayout layout) { // Tests must avoid XI2 reserved device IDs. DCHECK((device_id < 0) || (device_id > 1)); return KeyboardDeviceAddedInternal(device_id, device_name, kUnknownVendorId, - kUnknownProductId); + kUnknownProductId, layout); } void EventRewriterChromeOS::RewriteMouseButtonEventForTesting( @@ -354,11 +388,10 @@ } void EventRewriterChromeOS::DeviceKeyPressedOrReleased(int device_id) { - std::map<int, DeviceType>::const_iterator iter = - device_id_to_type_.find(device_id); + const auto iter = device_id_to_info_.find(device_id); DeviceType type; - if (iter != device_id_to_type_.end()) - type = iter->second; + if (iter != device_id_to_info_.end()) + type = iter->second.type; else type = KeyboardDeviceAdded(device_id); @@ -384,14 +417,13 @@ return false; // Check which device generated |event|. - std::map<int, DeviceType>::const_iterator iter = - device_id_to_type_.find(last_keyboard_device_id_); - if (iter == device_id_to_type_.end()) { + const auto iter = device_id_to_info_.find(last_keyboard_device_id_); + if (iter == device_id_to_info_.end()) { LOG(ERROR) << "Device ID " << last_keyboard_device_id_ << " is unknown."; return false; } - const DeviceType type = iter->second; + const DeviceType type = iter->second.type; return type == device_type; } @@ -971,7 +1003,8 @@ // Yes System Search+Fn -> Fn if (top_row_keys_are_function_keys == search_is_pressed) { // Rewrite the F1-F12 keys on a Chromebook keyboard to system keys. - static const KeyboardRemapping kFkeysToSystemKeys[] = { + // This is the original Chrome OS layout. + static const KeyboardRemapping kFkeysToSystemKeys1[] = { {{ui::EF_NONE, ui::VKEY_F1}, {ui::EF_NONE, ui::DomCode::BROWSER_BACK, ui::DomKey::BROWSER_BACK, ui::VKEY_BROWSER_BACK}}, @@ -1003,10 +1036,62 @@ {ui::EF_NONE, ui::DomCode::VOLUME_UP, ui::DomKey::AUDIO_VOLUME_UP, ui::VKEY_VOLUME_UP}}, }; + // The new layout with forward button removed and play/pause added. + static const KeyboardRemapping kFkeysToSystemKeys2[] = { + {{ui::EF_NONE, ui::VKEY_F1}, + {ui::EF_NONE, ui::DomCode::BROWSER_BACK, ui::DomKey::BROWSER_BACK, + ui::VKEY_BROWSER_BACK}}, + {{ui::EF_NONE, ui::VKEY_F2}, + {ui::EF_NONE, ui::DomCode::BROWSER_REFRESH, + ui::DomKey::BROWSER_REFRESH, ui::VKEY_BROWSER_REFRESH}}, + {{ui::EF_NONE, ui::VKEY_F3}, + {ui::EF_NONE, ui::DomCode::ZOOM_TOGGLE, ui::DomKey::ZOOM_TOGGLE, + ui::VKEY_MEDIA_LAUNCH_APP2}}, + {{ui::EF_NONE, ui::VKEY_F4}, + {ui::EF_NONE, ui::DomCode::SELECT_TASK, + ui::DomKey::LAUNCH_MY_COMPUTER, ui::VKEY_MEDIA_LAUNCH_APP1}}, + {{ui::EF_NONE, ui::VKEY_F5}, + {ui::EF_NONE, ui::DomCode::BRIGHTNESS_DOWN, + ui::DomKey::BRIGHTNESS_DOWN, ui::VKEY_BRIGHTNESS_DOWN}}, + {{ui::EF_NONE, ui::VKEY_F6}, + {ui::EF_NONE, ui::DomCode::BRIGHTNESS_UP, ui::DomKey::BRIGHTNESS_UP, + ui::VKEY_BRIGHTNESS_UP}}, + {{ui::EF_NONE, ui::VKEY_F7}, + {ui::EF_NONE, ui::DomCode::MEDIA_PLAY_PAUSE, + ui::DomKey::MEDIA_PLAY_PAUSE, ui::VKEY_MEDIA_PLAY_PAUSE}}, + {{ui::EF_NONE, ui::VKEY_F8}, + {ui::EF_NONE, ui::DomCode::VOLUME_MUTE, + ui::DomKey::AUDIO_VOLUME_MUTE, ui::VKEY_VOLUME_MUTE}}, + {{ui::EF_NONE, ui::VKEY_F9}, + {ui::EF_NONE, ui::DomCode::VOLUME_DOWN, + ui::DomKey::AUDIO_VOLUME_DOWN, ui::VKEY_VOLUME_DOWN}}, + {{ui::EF_NONE, ui::VKEY_F10}, + {ui::EF_NONE, ui::DomCode::VOLUME_UP, ui::DomKey::AUDIO_VOLUME_UP, + ui::VKEY_VOLUME_UP}}, + }; + + const auto iter = device_id_to_info_.find(key_event.source_device_id()); + KeyboardTopRowLayout layout = kKbdTopRowLayoutDefault; + if (iter != device_id_to_info_.end()) + layout = iter->second.top_row_layout; + + const KeyboardRemapping* mapping = nullptr; + size_t mappingSize = 0u; + switch (layout) { + case kKbdTopRowLayout2: + mapping = kFkeysToSystemKeys2; + mappingSize = arraysize(kFkeysToSystemKeys2); + break; + case kKbdTopRowLayout1: + default: + mapping = kFkeysToSystemKeys1; + mappingSize = arraysize(kFkeysToSystemKeys1); + break; + } + MutableKeyState incoming_without_command = *state; incoming_without_command.flags &= ~ui::EF_COMMAND_DOWN; - if (RewriteWithKeyboardRemappings(kFkeysToSystemKeys, - arraysize(kFkeysToSystemKeys), + if (RewriteWithKeyboardRemappings(mapping, mappingSize, incoming_without_command, state)) { return; } @@ -1090,7 +1175,8 @@ int device_id, const std::string& device_name, int vendor_id, - int product_id) { + int product_id, + KeyboardTopRowLayout layout) { const DeviceType type = GetDeviceType(device_name, vendor_id, product_id); if (type == kDeviceAppleKeyboard) { VLOG(1) << "Apple keyboard '" << device_name << "' connected: " @@ -1105,9 +1191,10 @@ VLOG(1) << "Unknown keyboard '" << device_name << "' connected: " << "id=" << device_id; } + // Always overwrite the existing device_id since the X server may reuse a // device id for an unattached device. - device_id_to_type_[device_id] = type; + device_id_to_info_[device_id] = {type, layout}; return type; } @@ -1120,7 +1207,8 @@ for (const auto& keyboard : keyboard_devices) { if (keyboard.id == device_id) { return KeyboardDeviceAddedInternal( - keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id); + keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id, + GetKeyboardTopRowLayout(keyboard.sys_path)); } } return kDeviceUnknown;
diff --git a/ui/chromeos/events/event_rewriter_chromeos.h b/ui/chromeos/events/event_rewriter_chromeos.h index fb81b4a..208c7f95 100644 --- a/ui/chromeos/events/event_rewriter_chromeos.h +++ b/ui/chromeos/events/event_rewriter_chromeos.h
@@ -10,6 +10,7 @@ #include <set> #include <string> +#include "base/files/file_path.h" #include "base/macros.h" #include "ui/events/event.h" #include "ui/events/event_rewriter.h" @@ -44,6 +45,20 @@ kDeviceVirtualCoreKeyboard, // X-server generated events. }; + enum KeyboardTopRowLayout { + // The original Chrome OS Layout: + // Browser Back, Browser Forward, Refresh, Full Screen, Overview, + // Brightness Down, Brightness Up, Mute, Volume Down, Volume Up. + kKbdTopRowLayout1 = 1, + // 2017 keyboard layout: Browser Forward is gone and Play/Pause + // key is added between Brightness Up and Mute. + kKbdTopRowLayout2 = 2, + + kKbdTopRowLayoutDefault = kKbdTopRowLayout1, + kKbdTopRowLayoutMin = kKbdTopRowLayout1, + kKbdTopRowLayoutMax = kKbdTopRowLayout2 + }; + // Things that keyboard-related rewriter phases can change about an Event. struct MutableKeyState { int flags; @@ -88,17 +103,16 @@ ~EventRewriterChromeOS() override; // Calls KeyboardDeviceAddedInternal. - DeviceType KeyboardDeviceAddedForTesting(int device_id, - const std::string& device_name); + DeviceType KeyboardDeviceAddedForTesting( + int device_id, + const std::string& device_name, + KeyboardTopRowLayout layout = kKbdTopRowLayoutDefault); // Calls RewriteMouseEvent(). void RewriteMouseButtonEventForTesting( const ui::MouseEvent& event, std::unique_ptr<ui::Event>* rewritten_event); - const std::map<int, DeviceType>& device_id_to_type_for_testing() const { - return device_id_to_type_; - } void set_last_keyboard_device_id_for_testing(int device_id) { last_keyboard_device_id_ = device_id; } @@ -123,6 +137,11 @@ std::unique_ptr<ui::Event>* rewritten_event); private: + struct DeviceInfo { + DeviceType type; + KeyboardTopRowLayout top_row_layout; + }; + void DeviceKeyPressedOrReleased(int device_id); // Adds a device to |device_id_to_type_|. @@ -133,7 +152,8 @@ DeviceType KeyboardDeviceAddedInternal(int device_id, const std::string& device_name, int vendor_id, - int product_id); + int product_id, + KeyboardTopRowLayout layout); // Returns true if |last_keyboard_device_id_| is Apple's. bool IsAppleKeyboard() const; @@ -177,7 +197,7 @@ // This is to ensure that press and release events are rewritten consistently. std::set<int> pressed_device_ids_; - std::map<int, DeviceType> device_id_to_type_; + std::map<int, DeviceInfo> device_id_to_info_; // The |source_device_id()| of the most recent keyboard event, // used to interpret modifiers on pointer events.