Changeset 210207 in webkit
- Timestamp:
- Dec 30, 2016 1:02:51 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r210206 r210207 1 2016-12-30 Michael Catanzaro <mcatanzaro@igalia.com> 2 3 [GTK] Improve user agent construction 4 https://bugs.webkit.org/show_bug.cgi?id=142074 5 6 Reviewed by Carlos Garcia Campos. 7 8 Using the macOS quirk rather than the Chrome quirk for Google domains was a mistake: it 9 broke Hangouts in a different way than the Chrome quirk, and also prevents use of the nice 10 Earth mode on Google Maps. Google is making it really hard to develop a sane quirk. 11 Eventually I settled on the combination of two quirks: (1) Firefox browser, and (2) Linux 12 x86_64 platform. See the bug for full discussion on why these quirks are the best way to 13 make Google domains work properly in WebKit. This is an extremely sad state of affairs, but 14 I'm confident it is the best option. Note this effectively includes a rollout of r210168. 15 16 Also, fix a bug that caused an extra space to be inserted in the middle of the user agent. 17 18 * platform/UserAgentQuirks.cpp: 19 (WebCore::isGoogle): 20 (WebCore::urlRequiresFirefoxBrowser): 21 (WebCore::urlRequiresMacintoshPlatform): 22 (WebCore::urlRequiresLinuxDesktopPlatform): 23 (WebCore::UserAgentQuirks::quirksForURL): 24 (WebCore::UserAgentQuirks::stringForQuirk): 25 (WebCore::UserAgentQuirks::firefoxRevisionString): 26 * platform/UserAgentQuirks.h: 27 * platform/gtk/UserAgentGtk.cpp: 28 (WebCore::buildUserAgentString): 29 1 30 2016-12-30 Andreas Kling <akling@apple.com> 2 31 -
trunk/Source/WebCore/platform/UserAgentQuirks.cpp
r210168 r210207 35 35 // Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp. 36 36 37 static bool isGoogle(const URL& url) 38 { 39 String baseDomain = topPrivatelyControlledDomain(url.host()); 40 41 // Our Google UA is *very* complicated to get right. Read 42 // https://webkit.org/b/142074 carefully before changing. Test that Earth 43 // view is available in Google Maps. Test Google Calendar. Test downloading 44 // the Hangouts browser plugin. Change platformVersionForUAString() to 45 // return "FreeBSD amd64" and test Maps and Calendar again. 46 if (baseDomain.startsWith("google.")) 47 return true; 48 if (baseDomain == "gstatic.com") 49 return true; 50 if (baseDomain == "googleapis.com") 51 return true; 52 if (baseDomain == "googleusercontent.com") 53 return true; 54 55 return false; 56 } 57 37 58 // Be careful with this quirk: it's an invitation for sites to use JavaScript 38 59 // that works in Chrome that WebKit cannot handle. Prefer other quirks instead. … … 57 78 } 58 79 80 static bool urlRequiresFirefoxBrowser(const URL& url) 81 { 82 return isGoogle(url); 83 } 84 59 85 static bool urlRequiresMacintoshPlatform(const URL& url) 60 86 { 61 87 String baseDomain = topPrivatelyControlledDomain(url.host()); 62 63 // Avoid receiving terrible fallbacks version of calendar.google.com and64 // maps.google.com on certain platforms. https://webkit.org/b/14207465 if (baseDomain.startsWith("google."))66 return true;67 88 68 89 // At least finance.yahoo.com displays a mobile version with WebKitGTK+'s standard user agent. … … 81 102 } 82 103 104 static bool urlRequiresLinuxDesktopPlatform(const URL& url) 105 { 106 return isGoogle(url); 107 } 108 83 109 UserAgentQuirks UserAgentQuirks::quirksForURL(const URL& url) 84 110 { 85 111 ASSERT(!url.isNull()); 112 86 113 UserAgentQuirks quirks; 114 87 115 if (urlRequiresChromeBrowser(url)) 88 116 quirks.add(UserAgentQuirks::NeedsChromeBrowser); 117 else if (urlRequiresFirefoxBrowser(url)) 118 quirks.add(UserAgentQuirks::NeedsFirefoxBrowser); 119 89 120 if (urlRequiresMacintoshPlatform(url)) 90 121 quirks.add(UserAgentQuirks::NeedsMacintoshPlatform); 122 else if (urlRequiresLinuxDesktopPlatform(url)) 123 quirks.add(UserAgentQuirks::NeedsLinuxDesktopPlatform); 124 91 125 return quirks; 92 126 } … … 98 132 // Get versions from https://chromium.googlesource.com/chromium/src.git 99 133 return ASCIILiteral("Chrome/56.0.2891.4"); 134 case NeedsFirefoxBrowser: 135 // Gecko version never changes. Firefox version must be updated below. 136 return ASCIILiteral("Gecko/20100101 Firefox/50.0"); 100 137 case NeedsMacintoshPlatform: 101 138 return ASCIILiteral("Macintosh; Intel Mac OS X 10_12"); 139 case NeedsLinuxDesktopPlatform: 140 return ASCIILiteral("X11; Linux x86_64"); 102 141 case NumUserAgentQuirks: 103 142 default: … … 107 146 } 108 147 148 String UserAgentQuirks::firefoxRevisionString() 149 { 150 return ASCIILiteral("rv:50.0"); 109 151 } 152 153 } -
trunk/Source/WebCore/platform/UserAgentQuirks.h
r207406 r210207 37 37 enum UserAgentQuirk { 38 38 NeedsChromeBrowser, 39 NeedsFirefoxBrowser, 39 40 NeedsMacintoshPlatform, 41 NeedsLinuxDesktopPlatform, 40 42 41 43 NumUserAgentQuirks … … 67 69 static String stringForQuirk(UserAgentQuirk); 68 70 71 static String firefoxRevisionString(); 72 69 73 private: 70 74 uint32_t m_quirks; -
trunk/Source/WebCore/platform/gtk/UserAgentGtk.cpp
r207406 r210207 1 1 /* 2 * Copyright (C) 2012, 2014 Igalia S.L.2 * Copyright (C) 2012, 2014, 2016 Igalia S.L. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 83 83 if (quirks.contains(UserAgentQuirks::NeedsMacintoshPlatform)) 84 84 uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsMacintoshPlatform)); 85 else if (quirks.contains(UserAgentQuirks::NeedsLinuxDesktopPlatform)) 86 uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsLinuxDesktopPlatform)); 85 87 else { 86 88 uaString.append(platformForUAString()); … … 89 91 } 90 92 91 uaString.appendLiteral(") AppleWebKit/"); 92 uaString.append(versionForUAString()); 93 uaString.appendLiteral(" (KHTML, like Gecko) "); 93 if (quirks.contains(UserAgentQuirks::NeedsFirefoxBrowser)) { 94 uaString.appendLiteral("; "); 95 uaString.append(UserAgentQuirks::firefoxRevisionString()); 96 uaString.appendLiteral(") "); 97 } else { 98 uaString.appendLiteral(") AppleWebKit/"); 99 uaString.append(versionForUAString()); 100 uaString.appendLiteral(" (KHTML, like Gecko) "); 101 } 94 102 95 103 // Note that Chrome UAs advertise *both* Chrome and Safari. … … 97 105 uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsChromeBrowser)); 98 106 uaString.appendLiteral(" "); 107 } else if (quirks.contains(UserAgentQuirks::NeedsFirefoxBrowser)) { 108 uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsFirefoxBrowser)); 109 uaString.appendLiteral(" "); 99 110 } 100 111 101 // Version/X is mandatory *before* Safari/X to be a valid Safari UA. See 102 // https://bugs.webkit.org/show_bug.cgi?id=133403 for details. 103 uaString.appendLiteral(" Version/10.0 Safari/"); 104 uaString.append(versionForUAString()); 112 if (!quirks.contains(UserAgentQuirks::NeedsFirefoxBrowser)) { 113 // Version/X is mandatory *before* Safari/X to be a valid Safari UA. See 114 // https://bugs.webkit.org/show_bug.cgi?id=133403 for details. 115 uaString.appendLiteral("Version/10.0 Safari/"); 116 uaString.append(versionForUAString()); 117 } 105 118 106 119 return uaString.toString(); -
trunk/Tools/ChangeLog
r210168 r210207 1 2016-12-30 Michael Catanzaro <mcatanzaro@igalia.com> 2 3 [GTK] Improve user agent construction 4 https://bugs.webkit.org/show_bug.cgi?id=142074 5 6 Reviewed by Carlos Garcia Campos. 7 8 * TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp: 9 (TestWebKitAPI::assertUserAgentForURLHasChromeBrowserQuirk): 10 (TestWebKitAPI::assertUserAgentForURLHasFirefoxBrowserQuirk): 11 (TestWebKitAPI::assertUserAgentForURLHasLinuxPlatformQuirk): 12 (TestWebKitAPI::assertUserAgentForURLHasMacPlatformQuirk): 13 (TestWebKitAPI::TEST): 14 1 15 2016-12-27 Michael Catanzaro <mcatanzaro@igalia.com> 2 16 -
trunk/Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp
r210168 r210207 37 37 String uaString = standardUserAgentForURL(URL(ParsedURLString, url)); 38 38 39 #if !OS(MAC_OS_X)40 EXPECT_FALSE(uaString.contains("Macintosh"));41 EXPECT_FALSE(uaString.contains("Mac OS X"));42 #endif43 #if OS(LINUX)44 EXPECT_TRUE(uaString.contains("Linux"));45 #endif46 #if OS(WINDOWS)47 EXPECT_TRUE(uaString.contains("Windows"));48 #endif49 50 39 EXPECT_TRUE(uaString.contains("Chrome")); 51 40 EXPECT_TRUE(uaString.contains("Safari")); 52 41 EXPECT_FALSE(uaString.contains("Chromium")); 42 EXPECT_FALSE(uaString.contains("Firefox")); 43 } 44 45 static void assertUserAgentForURLHasFirefoxBrowserQuirk(const char* url) 46 { 47 String uaString = standardUserAgentForURL(URL(ParsedURLString, url)); 48 49 EXPECT_FALSE(uaString.contains("Chrome")); 50 EXPECT_FALSE(uaString.contains("Safari")); 51 EXPECT_FALSE(uaString.contains("Chromium")); 52 EXPECT_FALSE(uaString.contains("AppleWebKit")); 53 EXPECT_TRUE(uaString.contains("Firefox")); 54 } 55 56 static void assertUserAgentForURLHasLinuxPlatformQuirk(const char* url) 57 { 58 String uaString = standardUserAgentForURL(URL(ParsedURLString, url)); 59 60 EXPECT_TRUE(uaString.contains("Linux")); 61 EXPECT_FALSE(uaString.contains("Macintosh")); 62 EXPECT_FALSE(uaString.contains("Mac OS X")); 63 EXPECT_FALSE(uaString.contains("Windows")); 64 EXPECT_FALSE(uaString.contains("Chrome")); 65 EXPECT_FALSE(uaString.contains("FreeBSD")); 53 66 } 54 67 … … 62 75 EXPECT_FALSE(uaString.contains("Windows")); 63 76 EXPECT_FALSE(uaString.contains("Chrome")); 77 EXPECT_FALSE(uaString.contains("FreeBSD")); 64 78 } 65 79 … … 70 84 EXPECT_TRUE(uaString.isNull()); 71 85 72 #if !OS(MAC_OS_X)73 86 // Google quirk should not affect sites with similar domains. 74 87 uaString = standardUserAgentForURL(URL(ParsedURLString, "http://www.googleblog.com/")); 75 EXPECT_FALSE(uaString.contains("Macintosh")); 76 EXPECT_FALSE(uaString.contains("Mac OS X")); 77 #endif 88 EXPECT_FALSE(uaString.contains("Firefox")); 78 89 79 90 assertUserAgentForURLHasChromeBrowserQuirk("http://typekit.com/"); … … 82 93 assertUserAgentForURLHasChromeBrowserQuirk("http://www.slack.com/"); 83 94 95 assertUserAgentForURLHasFirefoxBrowserQuirk("http://www.google.com/"); 96 assertUserAgentForURLHasFirefoxBrowserQuirk("http://www.google.es/"); 97 assertUserAgentForURLHasFirefoxBrowserQuirk("http://calendar.google.com/"); 98 assertUserAgentForURLHasFirefoxBrowserQuirk("http://plus.google.com/"); 99 100 assertUserAgentForURLHasLinuxPlatformQuirk("http://www.google.com/"); 101 assertUserAgentForURLHasLinuxPlatformQuirk("http://www.google.es/"); 102 assertUserAgentForURLHasLinuxPlatformQuirk("http://calendar.google.com/"); 103 assertUserAgentForURLHasLinuxPlatformQuirk("http://plus.google.com/"); 104 84 105 assertUserAgentForURLHasMacPlatformQuirk("http://www.yahoo.com/"); 85 106 assertUserAgentForURLHasMacPlatformQuirk("http://finance.yahoo.com/"); … … 87 108 assertUserAgentForURLHasMacPlatformQuirk("http://www.whatsapp.com/"); 88 109 assertUserAgentForURLHasMacPlatformQuirk("http://web.whatsapp.com/"); 89 90 assertUserAgentForURLHasMacPlatformQuirk("http://www.google.com/");91 assertUserAgentForURLHasMacPlatformQuirk("http://www.google.es/");92 assertUserAgentForURLHasMacPlatformQuirk("http://calendar.google.com/");93 assertUserAgentForURLHasMacPlatformQuirk("http://maps.google.com/");94 assertUserAgentForURLHasMacPlatformQuirk("http://plus.google.com/");95 110 } 96 111
Note: See TracChangeset
for help on using the changeset viewer.