WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
wk2-languages-network-process.diff (text/plain), 9.47 KB, created by
Carlos Garcia Campos
on 2013-12-24 06:37:01 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2013-12-24 06:37:01 PST
Size:
9.47 KB
patch
obsolete
>diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index d297cd7..6d6378e 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,5 +1,45 @@ > 2013-12-24 Carlos Garcia Campos <cgarcia@igalia.com> > >+ [GTK] Test /webkit2/WebKitWebContext/languages crashes with network process enabled >+ https://bugs.webkit.org/show_bug.cgi?id=126130 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We need to notify the network process when the user preferred >+ languages have changed to update the SoupSession accordingly. >+ >+ * NetworkProcess/NetworkProcess.h: Add >+ userPreferredLanguagesChanged when using soup network backend. >+ * NetworkProcess/NetworkProcess.messages.in: Add >+ UserPreferredLanguagesChanged message when using soup network >+ backend. >+ * NetworkProcess/soup/NetworkProcessSoup.cpp: >+ (WebKit::buildAcceptLanguages): Helper function to build the >+ languages string. >+ (WebKit::NetworkProcess::userPreferredLanguagesChanged): Update >+ the SoupSession to use the given languages. >+ (WebKit::NetworkProcess::platformInitializeNetworkProcess): Call >+ userPreferredLanguagesChanged() when initialization parameters >+ contain languages. >+ (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost): >+ Remove unnedded WebCore prefix. >+ (WebKit::NetworkProcess::clearCacheForAllOrigins): Simplify using >+ a single line. >+ * Shared/Network/NetworkProcessCreationParameters.cpp: >+ (WebKit::NetworkProcessCreationParameters::encode): Encode the >+ languages vector. >+ (WebKit::NetworkProcessCreationParameters::decode): Decode the >+ languages vector. >+ * Shared/Network/NetworkProcessCreationParameters.h: >+ * UIProcess/WebContext.cpp: >+ (WebKit::WebContext::languageChanged): Send a message also to the >+ network process. >+ * UIProcess/soup/WebContextSoup.cpp: >+ (WebKit::WebContext::platformInitializeNetworkProcess): Set >+ languages initial parameter. >+ >+2013-12-24 Carlos Garcia Campos <cgarcia@igalia.com> >+ > Define WebProcess::usesNetworkProcess unconditionally > https://bugs.webkit.org/show_bug.cgi?id=126208 > >diff --git a/Source/WebKit2/NetworkProcess/NetworkProcess.h b/Source/WebKit2/NetworkProcess/NetworkProcess.h >index 5b224fd..4a0b354 100644 >--- a/Source/WebKit2/NetworkProcess/NetworkProcess.h >+++ b/Source/WebKit2/NetworkProcess/NetworkProcess.h >@@ -115,6 +115,7 @@ private: > > #if USE(SOUP) > void setIgnoreTLSErrors(bool); >+ void userPreferredLanguagesChanged(Vector<String>); > #endif > > // Platform Helpers >diff --git a/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in b/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in >index 3525d6c..6ad6c25 100644 >--- a/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in >+++ b/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in >@@ -31,6 +31,7 @@ messages -> NetworkProcess LegacyReceiver { > > #if USE(SOUP) > SetIgnoreTLSErrors(bool ignoreTLSErrors) >+ UserPreferredLanguagesChanged(Vector<String> languages) > #endif > > EnsurePrivateBrowsingSession() >diff --git a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp b/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp >index fb1f674..aebd31c 100644 >--- a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp >+++ b/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp >@@ -28,15 +28,17 @@ > #if ENABLE(NETWORK_PROCESS) > #include "NetworkProcess.h" > >-#include "CertificateInfo.h" > #include "NetworkProcessCreationParameters.h" > #include "ResourceCachesToClear.h" >+#include <WebCore/CertificateInfo.h> > #include <WebCore/FileSystem.h> > #include <WebCore/NotImplemented.h> > #include <WebCore/ResourceHandle.h> > #include <libsoup/soup.h> > #include <wtf/gobject/GOwnPtr.h> > #include <wtf/gobject/GRefPtr.h> >+#include <wtf/text/CString.h> >+#include <wtf/text/StringBuilder.h> > > using namespace WebCore; > >@@ -73,13 +75,61 @@ static uint64_t getMemorySize() > #endif > } > >+// This function is based on Epiphany code in ephy-embed-prefs.c. >+static CString buildAcceptLanguages(Vector<String> languages) >+{ >+ // Ignore "C" locale. >+ size_t position = languages.find("c"); >+ if (position != notFound) >+ languages.remove(position); >+ >+ // Fallback to "en" if the list is empty. >+ if (languages.isEmpty()) >+ return "en"; >+ >+ // Calculate deltas for the quality values. >+ int delta; >+ if (languages.size() < 10) >+ delta = 10; >+ else if (languages.size() < 20) >+ delta = 5; >+ else >+ delta = 1; >+ >+ // Set quality values for each language. >+ StringBuilder builder; >+ for (size_t i = 0; i < languages.size(); ++i) { >+ if (i) >+ builder.append(", "); >+ >+ builder.append(languages[i]); >+ >+ int quality = 100 - i * delta; >+ if (quality > 0 && quality < 100) { >+ char buffer[8]; >+ g_ascii_formatd(buffer, 8, "%.2f", quality / 100.0); >+ builder.append(String::format(";q=%s", buffer)); >+ } >+ } >+ >+ return builder.toString().utf8(); >+} >+ >+void NetworkProcess::userPreferredLanguagesChanged(Vector<String> languages) >+{ >+ g_object_set(ResourceHandle::defaultSession(), "accept-language", buildAcceptLanguages(languages).data(), nullptr); >+} >+ > void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters& parameters) > { > ASSERT(!parameters.diskCacheDirectory.isEmpty()); > GRefPtr<SoupCache> soupCache = adoptGRef(soup_cache_new(parameters.diskCacheDirectory.utf8().data(), SOUP_CACHE_SINGLE_USER)); >- soup_session_add_feature(WebCore::ResourceHandle::defaultSession(), SOUP_SESSION_FEATURE(soupCache.get())); >+ soup_session_add_feature(ResourceHandle::defaultSession(), SOUP_SESSION_FEATURE(soupCache.get())); > soup_cache_load(soupCache.get()); > >+ if (!parameters.languages.isEmpty()) >+ userPreferredLanguagesChanged(parameters.languages); >+ > setIgnoreTLSErrors(parameters.ignoreTLSErrors); > } > >@@ -114,7 +164,7 @@ void NetworkProcess::setIgnoreTLSErrors(bool ignoreTLSErrors) > > void NetworkProcess::allowSpecificHTTPSCertificateForHost(const CertificateInfo& certificateInfo, const String& host) > { >- WebCore::ResourceHandle::setClientCertificate(host, certificateInfo.certificate()); >+ ResourceHandle::setClientCertificate(host, certificateInfo.certificate()); > } > > void NetworkProcess::clearCacheForAllOrigins(uint32_t cachesToClear) >@@ -122,8 +172,7 @@ void NetworkProcess::clearCacheForAllOrigins(uint32_t cachesToClear) > if (cachesToClear == InMemoryResourceCachesOnly) > return; > >- SoupSession* session = ResourceHandle::defaultSession(); >- soup_cache_clear(SOUP_CACHE(soup_session_get_feature(session, SOUP_TYPE_CACHE))); >+ soup_cache_clear(SOUP_CACHE(soup_session_get_feature(ResourceHandle::defaultSession(), SOUP_TYPE_CACHE))); > } > > void NetworkProcess::platformTerminate() >diff --git a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp b/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp >index 372aee6..a3926c8 100644 >--- a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp >+++ b/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp >@@ -56,6 +56,7 @@ void NetworkProcessCreationParameters::encode(CoreIPC::ArgumentEncoder& encoder) > #endif > #if USE(SOUP) > encoder << ignoreTLSErrors; >+ encoder << languages; > #endif > } > >@@ -93,6 +94,8 @@ bool NetworkProcessCreationParameters::decode(CoreIPC::ArgumentDecoder& decoder, > #if USE(SOUP) > if (!decoder.decode(result.ignoreTLSErrors)) > return false; >+ if (!decoder.decode(result.languages)) >+ return false; > #endif > > return true; >diff --git a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h b/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h >index d879bca..a844512 100644 >--- a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h >+++ b/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h >@@ -70,6 +70,7 @@ struct NetworkProcessCreationParameters { > > #if USE(SOUP) > bool ignoreTLSErrors; >+ Vector<String> languages; > #endif > }; > >diff --git a/Source/WebKit2/UIProcess/WebContext.cpp b/Source/WebKit2/UIProcess/WebContext.cpp >index 13cfab1..8eecf1a 100644 >--- a/Source/WebKit2/UIProcess/WebContext.cpp >+++ b/Source/WebKit2/UIProcess/WebContext.cpp >@@ -326,6 +326,10 @@ void WebContext::languageChanged(void* context) > void WebContext::languageChanged() > { > sendToAllProcesses(Messages::WebProcess::UserPreferredLanguagesChanged(userPreferredLanguages())); >+#if USE(SOUP) && ENABLE(NETWORK_PROCESS) >+ if (m_usesNetworkProcess && m_networkProcess) >+ m_networkProcess->send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0); >+#endif > } > > void WebContext::fullKeyboardAccessModeChanged(bool fullKeyboardAccessEnabled) >diff --git a/Source/WebKit2/UIProcess/soup/WebContextSoup.cpp b/Source/WebKit2/UIProcess/soup/WebContextSoup.cpp >index 9dfde5e..495a14a 100644 >--- a/Source/WebKit2/UIProcess/soup/WebContextSoup.cpp >+++ b/Source/WebKit2/UIProcess/soup/WebContextSoup.cpp >@@ -28,12 +28,14 @@ > #include "WebContext.h" > > #include "NetworkProcessCreationParameters.h" >+#include <WebCore/Language.h> > > namespace WebKit { > > void WebContext::platformInitializeNetworkProcess(NetworkProcessCreationParameters& parameters) > { > parameters.ignoreTLSErrors = m_ignoreTLSErrors; >+ parameters.languages = WebCore::userPreferredLanguages(); > } > > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 126130
:
219969
|
220072
|
220824
|
221061