cb860f84e14358e4a373a758a532ca749bdf92ac
[WebKit-https.git] / Source / WebKit / win / WebCoreSupport / WebFrameNetworkingContext.cpp
1 /*
2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Library General Public
6     License as published by the Free Software Foundation; either
7     version 2 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Library General Public License for more details.
13
14     You should have received a copy of the GNU Library General Public License
15     along with this library; see the file COPYING.LIB.  If not, write to
16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17     Boston, MA 02110-1301, USA.
18 */
19
20 #include "config.h"
21 #include "WebFrameNetworkingContext.h"
22
23 #include "FrameLoader.h"
24 #include "FrameLoaderClient.h"
25 #if USE(CFNETWORK)
26 #include <CFNetwork/CFHTTPCookiesPriv.h>
27 #endif
28 #include <WebCore/Settings.h>
29 #if USE(CFNETWORK)
30 #include <WebKitSystemInterface/WebKitSystemInterface.h>
31 #endif
32
33 using namespace WebCore;
34
35 #if USE(CFNETWORK)
36 static OwnPtr<NetworkStorageSession>& privateBrowsingStorageSession()
37 {
38     DEFINE_STATIC_LOCAL(OwnPtr<NetworkStorageSession>, session, ());
39     return session;
40 }
41 #endif
42
43 PassRefPtr<WebFrameNetworkingContext> WebFrameNetworkingContext::create(Frame* frame, const String& userAgent)
44 {
45     return adoptRef(new WebFrameNetworkingContext(frame, userAgent));
46 }
47
48 String WebFrameNetworkingContext::userAgent() const
49 {
50     return m_userAgent;
51 }
52
53 String WebFrameNetworkingContext::referrer() const
54 {
55     return frame()->loader()->referrer();
56 }
57
58 WebCore::ResourceError WebFrameNetworkingContext::blockedError(const WebCore::ResourceRequest& request) const
59 {
60     return frame()->loader()->client()->blockedError(request);
61 }
62
63 static String& privateBrowsingStorageSessionIdentifierBase()
64 {
65     ASSERT(isMainThread());
66     DEFINE_STATIC_LOCAL(String, base, ());
67     return base;
68 }
69
70 void WebFrameNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase(const String& identifier)
71 {
72     privateBrowsingStorageSessionIdentifierBase() = identifier;
73 }
74
75 void WebFrameNetworkingContext::ensurePrivateBrowsingSession()
76 {
77     ASSERT(isMainThread());
78 #if USE(CFNETWORK)
79     if (privateBrowsingStorageSession())
80         return;
81
82     String identifierBase = privateBrowsingStorageSessionIdentifierBase().isNull() ? String(reinterpret_cast<CFStringRef>(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleIdentifierKey))) : privateBrowsingStorageSessionIdentifierBase();
83
84     privateBrowsingStorageSession() = NetworkStorageSession::createPrivateBrowsingSession(identifierBase);
85 #endif
86 }
87
88 void WebFrameNetworkingContext::destroyPrivateBrowsingSession()
89 {
90 #if USE(CFNETWORK)
91     privateBrowsingStorageSession() = nullptr;
92 #endif
93 }
94
95 #if USE(CFNETWORK)
96 NetworkStorageSession& WebFrameNetworkingContext::storageSession() const
97 {
98     bool inPrivateBrowsingMode = frame() && frame()->settings() && frame()->settings()->privateBrowsingEnabled();
99     if (inPrivateBrowsingMode) {
100         ASSERT(privateBrowsingStorageSession());
101         return *privateBrowsingStorageSession();
102     }
103     return NetworkStorageSession::defaultStorageSession();
104 }
105
106 void WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts(CFHTTPCookieStorageAcceptPolicy policy)
107 {
108     if (RetainPtr<CFHTTPCookieStorageRef> cookieStorage = NetworkStorageSession::defaultStorageSession().cookieStorage())
109         CFHTTPCookieStorageSetCookieAcceptPolicy(cookieStorage.get(), policy);
110
111     if (privateBrowsingStorageSession())
112         CFHTTPCookieStorageSetCookieAcceptPolicy(privateBrowsingStorageSession()->cookieStorage().get(), policy);
113 }
114 #endif