Changeset 67211 in webkit
- Timestamp:
- Sep 10, 2010 10:14:44 AM (14 years ago)
- Location:
- trunk/WebKit/gtk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit/gtk/ChangeLog
r67206 r67211 1 2010-09-10 Gustavo Noronha Silva <gns@gnome.org> 2 3 Reviewed by Martin Robinson. 4 5 [GTK] Google sites do not like WebKitGTK+ 6 https://bugs.webkit.org/show_bug.cgi?id=39617 7 8 Special-case Google domains, and spoof User-Agent when talking to 9 them, to stop being treated as a second-class citizen. 10 11 * WebCoreSupport/FrameLoaderClientGtk.cpp: 12 (WebKit::initializeDomainsList): 13 (WebKit::isGoogleDomain): 14 (WebKit::FrameLoaderClient::userAgent): If enable-site-specific-quirks 15 is enabled, send the standard WebKit User-Agent string, disregarding the 16 custom one set by the browser for Google domains. 17 * webkit/webkitprivate.h: 18 * webkit/webkitwebsettings.cpp: 19 (webkitPlatform): Fix style, and simplify. 20 (webkitOSVersion): Ditto. 21 (webkitUserAgent): Add the Version/x.y string Safari has been 22 using since Safari 2.2. 23 1 24 2010-09-10 Xan Lopez <xlopez@igalia.com> 2 25 -
trunk/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
r66794 r67211 50 50 #include "MouseEvent.h" 51 51 #include "NotImplemented.h" 52 #include "Page.h" 52 53 #include "PlatformString.h" 53 54 #include "PluginDatabase.h" … … 94 95 } 95 96 96 String FrameLoaderClient::userAgent(const KURL&) 97 static void initializeDomainsList(HashSet<String>& googleDomains) 98 { 99 // Google search domains. 100 googleDomains.add("biz"); 101 googleDomains.add("com"); 102 googleDomains.add("net"); 103 googleDomains.add("org"); 104 googleDomains.add("ae"); 105 googleDomains.add("ag"); 106 googleDomains.add("am"); 107 googleDomains.add("at"); 108 googleDomains.add("az"); 109 googleDomains.add("be"); 110 googleDomains.add("bi"); 111 googleDomains.add("ca"); 112 googleDomains.add("cc"); 113 googleDomains.add("cd"); 114 googleDomains.add("cg"); 115 googleDomains.add("ch"); 116 googleDomains.add("cl"); 117 googleDomains.add("com.br"); 118 googleDomains.add("co.uk"); 119 googleDomains.add("co.jp"); 120 googleDomains.add("de"); 121 googleDomains.add("dj"); 122 googleDomains.add("dk"); 123 googleDomains.add("es"); 124 googleDomains.add("fi"); 125 googleDomains.add("fm"); 126 googleDomains.add("fr"); 127 googleDomains.add("gg"); 128 googleDomains.add("gl"); 129 googleDomains.add("gm"); 130 googleDomains.add("gs"); 131 googleDomains.add("hn"); 132 googleDomains.add("hu"); 133 googleDomains.add("ie"); 134 googleDomains.add("it"); 135 googleDomains.add("je"); 136 googleDomains.add("kz"); 137 googleDomains.add("li"); 138 googleDomains.add("lt"); 139 googleDomains.add("lu"); 140 googleDomains.add("lv"); 141 googleDomains.add("ma"); 142 googleDomains.add("ms"); 143 googleDomains.add("mu"); 144 googleDomains.add("mw"); 145 googleDomains.add("nl"); 146 googleDomains.add("no"); 147 googleDomains.add("nu"); 148 googleDomains.add("pl"); 149 googleDomains.add("pn"); 150 googleDomains.add("pt"); 151 googleDomains.add("ru"); 152 googleDomains.add("rw"); 153 googleDomains.add("sh"); 154 googleDomains.add("sk"); 155 googleDomains.add("sm"); 156 googleDomains.add("st"); 157 googleDomains.add("td"); 158 googleDomains.add("tk"); 159 googleDomains.add("tp"); 160 googleDomains.add("tv"); 161 googleDomains.add("us"); 162 googleDomains.add("uz"); 163 googleDomains.add("ws"); 164 } 165 166 static bool isGoogleDomain(String host) 167 { 168 DEFINE_STATIC_LOCAL(HashSet<String>, googleDomains, ()); 169 DEFINE_STATIC_LOCAL(Vector<String>, otherGoogleDomains, ()); 170 171 if (googleDomains.isEmpty()) { 172 otherGoogleDomains.append("gmail.com"); 173 otherGoogleDomains.append("youtube.com"); 174 otherGoogleDomains.append("gstatic.com"); 175 otherGoogleDomains.append("ytimg.com"); 176 177 initializeDomainsList(googleDomains); 178 } 179 180 // First check if this is one of the various google.com international domains. 181 int position = host.find(".google."); 182 if (position > 0 && googleDomains.contains(host.substring(position + sizeof(".google.")))) 183 return true; 184 185 // Then we check the possibility of it being one of the other, .com-only google domains. 186 for (unsigned int i = 0; i < otherGoogleDomains.size(); i++) { 187 if (host.endsWith(otherGoogleDomains.at(i))) 188 return true; 189 } 190 191 return false; 192 } 193 194 String FrameLoaderClient::userAgent(const KURL& url) 97 195 { 98 196 WebKitWebSettings* settings = webkit_web_view_get_settings(getViewFromFrame(m_frame)); 197 198 gboolean useQuirks; 199 g_object_get(settings, "enable-site-specific-quirks", &useQuirks, NULL); 200 201 // For Google domains, drop the browser's custom User Agent string, and use the standard 202 // WebKit/Safari one, so they don't give us a broken experience. 203 if (useQuirks && isGoogleDomain(url.host())) 204 return webkitUserAgent(); 205 99 206 return String::fromUTF8(webkit_web_settings_get_user_agent(settings)); 100 207 } -
trunk/WebKit/gtk/webkit/webkitprivate.h
r66887 r67211 60 60 #include "Node.h" 61 61 #include "Page.h" 62 #include "PlatformString.h" 62 63 #include "ResourceHandle.h" 63 64 #include "ResourceRequest.h" … … 207 208 }; 208 209 210 WTF::String 211 webkitUserAgent(); 212 209 213 void 210 214 webkit_web_frame_core_frame_gone(WebKitWebFrame*); -
trunk/WebKit/gtk/webkit/webkitwebsettings.cpp
r64629 r67211 164 164 // This is a liberal interpretation of http://www.mozilla.org/build/revised-user-agent-strings.html 165 165 // See also http://developer.apple.com/internet/safari/faq.html#anchor2 166 static String webkit_get_user_agent() 167 { 168 gchar* platform; 169 gchar* osVersion; 170 166 static String webkitPlatform() 167 { 171 168 #if PLATFORM(X11) 172 platform = g_strdup("X11");169 DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("X11"))); 173 170 #elif OS(WINDOWS) 174 platform = g_strdup("Windows");171 DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("Windows"))); 175 172 #elif PLATFORM(MAC) 176 platform = g_strdup("Macintosh");173 DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("Macintosh"))); 177 174 #elif defined(GDK_WINDOWING_DIRECTFB) 178 platform = g_strdup("DirectFB");175 DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("DirectFB"))); 179 176 #else 180 platform = g_strdup("Unknown");177 DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("Unknown"))); 181 178 #endif 182 179 180 return uaPlatform; 181 } 182 183 static String webkitOSVersion() 184 { 183 185 // FIXME: platform/version detection can be shared. 184 186 #if OS(DARWIN) 185 187 186 188 #if CPU(X86) 187 osVersion = g_strdup("Intel Mac OS X");189 DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("Intel Mac OS X"))); 188 190 #else 189 osVersion = g_strdup("PPC Mac OS X");191 DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("PPC Mac OS X"))); 190 192 #endif 191 193 192 194 #elif OS(UNIX) 195 DEFINE_STATIC_LOCAL(String, uaOSVersion, (String())); 196 197 if (!uaOSVersion.isEmpty()) 198 return uaOSVersion; 199 193 200 struct utsname name; 194 201 if (uname(&name) != -1) 195 osVersion = g_strdup_printf("%s %s", name.sysname, name.machine);202 uaOSVersion = String::format("%s %s", name.sysname, name.machine); 196 203 else 197 osVersion = g_strdup("Unknown"); 198 204 uaOSVersion = String("Unknown"); 199 205 #elif OS(WINDOWS) 200 // FIXME: Compute the Windows version 201 osVersion = g_strdup("Windows"); 202 206 DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("Windows"))); 203 207 #else 204 osVersion = g_strdup("Unknown");208 DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("Unknown"))); 205 209 #endif 206 210 211 return uaOSVersion; 212 } 213 214 String webkitUserAgent() 215 { 207 216 // We mention Safari since many broken sites check for it (OmniWeb does this too) 208 217 // We re-use the WebKit version, though it doesn't seem to matter much in practice 209 218 210 219 DEFINE_STATIC_LOCAL(const String, uaVersion, (String::format("%d.%d+", WEBKIT_USER_AGENT_MAJOR_VERSION, WEBKIT_USER_AGENT_MINOR_VERSION))); 211 DEFINE_STATIC_LOCAL(const String, staticUA, (String::format("Mozilla/5.0 (%s; U; %s; %s) AppleWebKit/%s (KHTML, like Gecko) Safari/%s", 212 platform, osVersion, defaultLanguage().utf8().data(), uaVersion.utf8().data(), uaVersion.utf8().data()))); 213 214 g_free(osVersion); 215 g_free(platform); 220 DEFINE_STATIC_LOCAL(const String, staticUA, (String::format("Mozilla/5.0 (%s; U; %s; %s) AppleWebKit/%s (KHTML, like Gecko) Version/5.0 Safari/%s", 221 webkitPlatform().utf8().data(), webkitOSVersion().utf8().data(), defaultLanguage().utf8().data(), uaVersion.utf8().data(), uaVersion.utf8().data()))); 216 222 217 223 return staticUA; … … 608 614 _("User Agent"), 609 615 _("The User-Agent string used by WebKitGtk"), 610 webkit _get_user_agent().utf8().data(),616 webkitUserAgent().utf8().data(), 611 617 flags)); 612 618 … … 1035 1041 g_free(priv->user_agent); 1036 1042 if (!g_value_get_string(value) || !strlen(g_value_get_string(value))) 1037 priv->user_agent = g_strdup(webkit _get_user_agent().utf8().data());1043 priv->user_agent = g_strdup(webkitUserAgent().utf8().data()); 1038 1044 else 1039 1045 priv->user_agent = g_strdup(g_value_get_string(value));
Note: See TracChangeset
for help on using the changeset viewer.