| Differences between
and this patch
- a/Source/WebKit2/ChangeLog +40 lines
Lines 1-5 a/Source/WebKit2/ChangeLog_sec1
1
2013-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>
1
2013-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>
2
2
3
        [GTK] Test /webkit2/WebKitWebContext/languages crashes with network process enabled
4
        https://bugs.webkit.org/show_bug.cgi?id=126130
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        We need to notify the network process when the user preferred
9
        languages have changed to update the SoupSession accordingly.
10
11
        * NetworkProcess/NetworkProcess.h: Add
12
        userPreferredLanguagesChanged when using soup network backend.
13
        * NetworkProcess/NetworkProcess.messages.in: Add
14
        UserPreferredLanguagesChanged message when using soup network
15
        backend.
16
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
17
        (WebKit::buildAcceptLanguages): Helper function to build the
18
        languages string.
19
        (WebKit::NetworkProcess::userPreferredLanguagesChanged): Update
20
        the SoupSession to use the given languages.
21
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Call
22
        userPreferredLanguagesChanged() when initialization parameters
23
        contain languages.
24
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):
25
        Remove unnedded WebCore prefix.
26
        (WebKit::NetworkProcess::clearCacheForAllOrigins): Simplify using
27
        a single line.
28
        * Shared/Network/NetworkProcessCreationParameters.cpp:
29
        (WebKit::NetworkProcessCreationParameters::encode): Encode the
30
        languages vector.
31
        (WebKit::NetworkProcessCreationParameters::decode): Decode the
32
        languages vector.
33
        * Shared/Network/NetworkProcessCreationParameters.h:
34
        * UIProcess/WebContext.cpp:
35
        (WebKit::WebContext::languageChanged): Send a message also to the
36
        network process.
37
        * UIProcess/soup/WebContextSoup.cpp:
38
        (WebKit::WebContext::platformInitializeNetworkProcess): Set
39
        languages initial parameter.
40
41
2013-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>
42
3
        Define WebProcess::usesNetworkProcess unconditionally
43
        Define WebProcess::usesNetworkProcess unconditionally
4
        https://bugs.webkit.org/show_bug.cgi?id=126208
44
        https://bugs.webkit.org/show_bug.cgi?id=126208
5
45
- a/Source/WebKit2/NetworkProcess/NetworkProcess.h +1 lines
Lines 115-120 private: a/Source/WebKit2/NetworkProcess/NetworkProcess.h_sec1
115
115
116
#if USE(SOUP)
116
#if USE(SOUP)
117
    void setIgnoreTLSErrors(bool);
117
    void setIgnoreTLSErrors(bool);
118
    void userPreferredLanguagesChanged(Vector<String>);
118
#endif
119
#endif
119
120
120
    // Platform Helpers
121
    // Platform Helpers
- a/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in +1 lines
Lines 31-36 messages -> NetworkProcess LegacyReceiver { a/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in_sec1
31
31
32
#if USE(SOUP)
32
#if USE(SOUP)
33
    SetIgnoreTLSErrors(bool ignoreTLSErrors)
33
    SetIgnoreTLSErrors(bool ignoreTLSErrors)
34
    UserPreferredLanguagesChanged(Vector<String> languages)
34
#endif
35
#endif
35
36
36
    EnsurePrivateBrowsingSession()
37
    EnsurePrivateBrowsingSession()
- a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp -5 / +54 lines
Lines 28-42 a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp_sec1
28
#if ENABLE(NETWORK_PROCESS)
28
#if ENABLE(NETWORK_PROCESS)
29
#include "NetworkProcess.h"
29
#include "NetworkProcess.h"
30
30
31
#include "CertificateInfo.h"
32
#include "NetworkProcessCreationParameters.h"
31
#include "NetworkProcessCreationParameters.h"
33
#include "ResourceCachesToClear.h"
32
#include "ResourceCachesToClear.h"
33
#include <WebCore/CertificateInfo.h>
34
#include <WebCore/FileSystem.h>
34
#include <WebCore/FileSystem.h>
35
#include <WebCore/NotImplemented.h>
35
#include <WebCore/NotImplemented.h>
36
#include <WebCore/ResourceHandle.h>
36
#include <WebCore/ResourceHandle.h>
37
#include <libsoup/soup.h>
37
#include <libsoup/soup.h>
38
#include <wtf/gobject/GOwnPtr.h>
38
#include <wtf/gobject/GOwnPtr.h>
39
#include <wtf/gobject/GRefPtr.h>
39
#include <wtf/gobject/GRefPtr.h>
40
#include <wtf/text/CString.h>
41
#include <wtf/text/StringBuilder.h>
40
42
41
using namespace WebCore;
43
using namespace WebCore;
42
44
Lines 73-85 static uint64_t getMemorySize() a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp_sec2
73
#endif
75
#endif
74
}
76
}
75
77
78
// This function is based on Epiphany code in ephy-embed-prefs.c.
79
static CString buildAcceptLanguages(Vector<String> languages)
80
{
81
    // Ignore "C" locale.
82
    size_t position = languages.find("c");
83
    if (position != notFound)
84
        languages.remove(position);
85
86
    // Fallback to "en" if the list is empty.
87
    if (languages.isEmpty())
88
        return "en";
89
90
    // Calculate deltas for the quality values.
91
    int delta;
92
    if (languages.size() < 10)
93
        delta = 10;
94
    else if (languages.size() < 20)
95
        delta = 5;
96
    else
97
        delta = 1;
98
99
    // Set quality values for each language.
100
    StringBuilder builder;
101
    for (size_t i = 0; i < languages.size(); ++i) {
102
        if (i)
103
            builder.append(", ");
104
105
        builder.append(languages[i]);
106
107
        int quality = 100 - i * delta;
108
        if (quality > 0 && quality < 100) {
109
            char buffer[8];
110
            g_ascii_formatd(buffer, 8, "%.2f", quality / 100.0);
111
            builder.append(String::format(";q=%s", buffer));
112
        }
113
    }
114
115
    return builder.toString().utf8();
116
}
117
118
void NetworkProcess::userPreferredLanguagesChanged(Vector<String> languages)
119
{
120
    g_object_set(ResourceHandle::defaultSession(), "accept-language", buildAcceptLanguages(languages).data(), nullptr);
121
}
122
76
void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters& parameters)
123
void NetworkProcess::platformInitializeNetworkProcess(const NetworkProcessCreationParameters& parameters)
77
{
124
{
78
    ASSERT(!parameters.diskCacheDirectory.isEmpty());
125
    ASSERT(!parameters.diskCacheDirectory.isEmpty());
79
    GRefPtr<SoupCache> soupCache = adoptGRef(soup_cache_new(parameters.diskCacheDirectory.utf8().data(), SOUP_CACHE_SINGLE_USER));
126
    GRefPtr<SoupCache> soupCache = adoptGRef(soup_cache_new(parameters.diskCacheDirectory.utf8().data(), SOUP_CACHE_SINGLE_USER));
80
    soup_session_add_feature(WebCore::ResourceHandle::defaultSession(), SOUP_SESSION_FEATURE(soupCache.get()));
127
    soup_session_add_feature(ResourceHandle::defaultSession(), SOUP_SESSION_FEATURE(soupCache.get()));
81
    soup_cache_load(soupCache.get());
128
    soup_cache_load(soupCache.get());
82
129
130
    if (!parameters.languages.isEmpty())
131
        userPreferredLanguagesChanged(parameters.languages);
132
83
    setIgnoreTLSErrors(parameters.ignoreTLSErrors);
133
    setIgnoreTLSErrors(parameters.ignoreTLSErrors);
84
}
134
}
85
135
Lines 114-120 void NetworkProcess::setIgnoreTLSErrors(bool ignoreTLSErrors) a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp_sec3
114
164
115
void NetworkProcess::allowSpecificHTTPSCertificateForHost(const CertificateInfo& certificateInfo, const String& host)
165
void NetworkProcess::allowSpecificHTTPSCertificateForHost(const CertificateInfo& certificateInfo, const String& host)
116
{
166
{
117
    WebCore::ResourceHandle::setClientCertificate(host, certificateInfo.certificate());
167
    ResourceHandle::setClientCertificate(host, certificateInfo.certificate());
118
}
168
}
119
169
120
void NetworkProcess::clearCacheForAllOrigins(uint32_t cachesToClear)
170
void NetworkProcess::clearCacheForAllOrigins(uint32_t cachesToClear)
Lines 122-129 void NetworkProcess::clearCacheForAllOrigins(uint32_t cachesToClear) a/Source/WebKit2/NetworkProcess/soup/NetworkProcessSoup.cpp_sec4
122
    if (cachesToClear == InMemoryResourceCachesOnly)
172
    if (cachesToClear == InMemoryResourceCachesOnly)
123
        return;
173
        return;
124
174
125
    SoupSession* session = ResourceHandle::defaultSession();
175
    soup_cache_clear(SOUP_CACHE(soup_session_get_feature(ResourceHandle::defaultSession(), SOUP_TYPE_CACHE)));
126
    soup_cache_clear(SOUP_CACHE(soup_session_get_feature(session, SOUP_TYPE_CACHE)));
127
}
176
}
128
177
129
void NetworkProcess::platformTerminate()
178
void NetworkProcess::platformTerminate()
- a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp +3 lines
Lines 56-61 void NetworkProcessCreationParameters::encode(CoreIPC::ArgumentEncoder& encoder) a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp_sec1
56
#endif
56
#endif
57
#if USE(SOUP)
57
#if USE(SOUP)
58
    encoder << ignoreTLSErrors;
58
    encoder << ignoreTLSErrors;
59
    encoder << languages;
59
#endif
60
#endif
60
}
61
}
61
62
Lines 93-98 bool NetworkProcessCreationParameters::decode(CoreIPC::ArgumentDecoder& decoder, a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp_sec2
93
#if USE(SOUP)
94
#if USE(SOUP)
94
    if (!decoder.decode(result.ignoreTLSErrors))
95
    if (!decoder.decode(result.ignoreTLSErrors))
95
        return false;
96
        return false;
97
    if (!decoder.decode(result.languages))
98
        return false;
96
#endif
99
#endif
97
100
98
    return true;
101
    return true;
- a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h +1 lines
Lines 70-75 struct NetworkProcessCreationParameters { a/Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h_sec1
70
70
71
#if USE(SOUP)
71
#if USE(SOUP)
72
    bool ignoreTLSErrors;
72
    bool ignoreTLSErrors;
73
    Vector<String> languages;
73
#endif
74
#endif
74
};
75
};
75
76
- a/Source/WebKit2/UIProcess/WebContext.cpp +4 lines
Lines 326-331 void WebContext::languageChanged(void* context) a/Source/WebKit2/UIProcess/WebContext.cpp_sec1
326
void WebContext::languageChanged()
326
void WebContext::languageChanged()
327
{
327
{
328
    sendToAllProcesses(Messages::WebProcess::UserPreferredLanguagesChanged(userPreferredLanguages()));
328
    sendToAllProcesses(Messages::WebProcess::UserPreferredLanguagesChanged(userPreferredLanguages()));
329
#if USE(SOUP) && ENABLE(NETWORK_PROCESS)
330
    if (m_usesNetworkProcess && m_networkProcess)
331
        m_networkProcess->send(Messages::NetworkProcess::UserPreferredLanguagesChanged(userPreferredLanguages()), 0);
332
#endif
329
}
333
}
330
334
331
void WebContext::fullKeyboardAccessModeChanged(bool fullKeyboardAccessEnabled)
335
void WebContext::fullKeyboardAccessModeChanged(bool fullKeyboardAccessEnabled)
- a/Source/WebKit2/UIProcess/soup/WebContextSoup.cpp +2 lines
Lines 28-39 a/Source/WebKit2/UIProcess/soup/WebContextSoup.cpp_sec1
28
#include "WebContext.h"
28
#include "WebContext.h"
29
29
30
#include "NetworkProcessCreationParameters.h"
30
#include "NetworkProcessCreationParameters.h"
31
#include <WebCore/Language.h>
31
32
32
namespace WebKit {
33
namespace WebKit {
33
34
34
void WebContext::platformInitializeNetworkProcess(NetworkProcessCreationParameters& parameters)
35
void WebContext::platformInitializeNetworkProcess(NetworkProcessCreationParameters& parameters)
35
{
36
{
36
    parameters.ignoreTLSErrors = m_ignoreTLSErrors;
37
    parameters.ignoreTLSErrors = m_ignoreTLSErrors;
38
    parameters.languages = WebCore::userPreferredLanguages();
37
}
39
}
38
40
39
}
41
}

Return to Bug 126130