Changeset 228472 in webkit
- Timestamp:
- Feb 14, 2018 10:52:15 AM (6 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r228470 r228472 1 2018-02-14 Maureen Daum <mdaum@apple.com> 2 3 Add C SPI for support of Website Data Store in Website Policies 4 https://bugs.webkit.org/show_bug.cgi?id=182698 5 <rdar://problem/37412008> 6 7 Reviewed by Andy Estes. 8 9 Expand the API added for _WKWebsitePolicies.websiteDataStore in r225989 and r226325 10 to be available in the C API. In the ObjC API, we handle setting the website data 11 store in NavigationState::NavigationClient::decidePolicyForNavigationAction. There 12 we throw an exception if setting the website data store isn't supported, and then 13 change the website data store. The equivalent place to do this work in the C API is 14 in WKFramePolicyListenerUseWithPolicies. However, instead of throwing exceptions, 15 release asserts are used. 16 17 * UIProcess/API/C/WKFramePolicyListener.cpp: 18 (WKFramePolicyListenerUseWithPolicies): 19 If the website policies data contains a website data store, do the same checks that 20 are done in NavigationState::NavigationClient::decidePolicyForNavigationAction. Namely, 21 that it is a valid website data store and it is a policy decision for a main frame navigation. 22 If these checks are met, change the website data store. 23 * UIProcess/API/C/WKPage.cpp: 24 (WKPageUpdateWebsitePolicies): 25 * UIProcess/API/C/WKWebsitePolicies.cpp: 26 (WKWebsitePoliciesGetDataStore): 27 (WKWebsitePoliciesSetDataStore): 28 * UIProcess/API/C/WKWebsitePolicies.h: 29 * UIProcess/WebFrameListenerProxy.cpp: 30 (WebKit::WebFrameListenerProxy::changeWebsiteDataStore): 31 (WebKit::WebFrameListenerProxy::isMainFrame): 32 Expose whether the frame proxy is for a main frame, which is required to verify that 33 website policies only specify a website data store for main frame policy decisions. 34 * UIProcess/WebFrameListenerProxy.h: 35 * UIProcess/WebFramePolicyListenerProxy.cpp: 36 * UIProcess/WebFrameProxy.cpp: 37 (WebKit::WebFrameProxy::changeWebsiteDataStore): 38 * UIProcess/WebFrameProxy.h: 39 1 40 2018-02-14 Ryan Haddad <ryanhaddad@apple.com> 2 41 -
trunk/Source/WebKit/UIProcess/API/C/WKFramePolicyListener.cpp
r225989 r228472 27 27 #include "WKFramePolicyListener.h" 28 28 29 #include "APIWebsiteDataStore.h" 29 30 #include "APIWebsitePolicies.h" 30 31 #include "WKAPICast.h" … … 48 49 { 49 50 auto data = toImpl(websitePolicies)->data(); 50 RELEASE_ASSERT_WITH_MESSAGE(!data.websiteDataStoreParameters, "Setting WebsitePolicies.WebsiteDataStore is not supported in the C API."); 51 52 if (data.websiteDataStoreParameters) { 53 auto& sessionID = data.websiteDataStoreParameters->networkSessionParameters.sessionID; 54 RELEASE_ASSERT_WITH_MESSAGE(sessionID.isEphemeral() || sessionID == PAL::SessionID::defaultSessionID(), "If WebsitePolicies specifies a WebsiteDataStore, the data store's session must be default or non-persistent."); 55 RELEASE_ASSERT_WITH_MESSAGE(toImpl(policyListenerRef)->isMainFrame(), "WebsitePolicies cannot specify a WebsiteDataStore for subframe navigations."); 56 57 toImpl(policyListenerRef)->changeWebsiteDataStore(toImpl(websitePolicies)->websiteDataStore()->websiteDataStore()); 58 } 59 51 60 toImpl(policyListenerRef)->use(WTFMove(data)); 52 61 } -
trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp
r228194 r228472 327 327 { 328 328 auto data = toImpl(websitePoliciesRef)->data(); 329 RELEASE_ASSERT_WITH_MESSAGE(!data.websiteDataStoreParameters, "Setting WebsitePolicies.WebsiteDataStore is not supported in the C API.");329 RELEASE_ASSERT_WITH_MESSAGE(!data.websiteDataStoreParameters, "Setting WebsitePolicies.WebsiteDataStore is only supported during WKFramePolicyListenerUseWithPolicies()."); 330 330 toImpl(pageRef)->updateWebsitePolicies(WTFMove(data)); 331 331 } -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp
r226984 r228472 28 28 29 29 #include "APIDictionary.h" 30 #include "APIWebsiteDataStore.h" 30 31 #include "APIWebsitePolicies.h" 31 32 #include "WKAPICast.h" … … 175 176 ASSERT_NOT_REACHED(); 176 177 } 178 179 WKWebsiteDataStoreRef WKWebsitePoliciesGetDataStore(WKWebsitePoliciesRef websitePolicies) 180 { 181 return toAPI(toImpl(websitePolicies)->websiteDataStore()); 182 } 183 184 void WKWebsitePoliciesSetDataStore(WKWebsitePoliciesRef websitePolicies, WKWebsiteDataStoreRef websiteDataStore) 185 { 186 toImpl(websitePolicies)->setWebsiteDataStore(toImpl(websiteDataStore)); 187 } 188 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h
r226984 r228472 71 71 WK_EXPORT void WKWebsitePoliciesSetPopUpPolicy(WKWebsitePoliciesRef, WKWebsitePopUpPolicy); 72 72 73 WK_EXPORT WKWebsiteDataStoreRef WKWebsitePoliciesGetDataStore(WKWebsitePoliciesRef); 74 WK_EXPORT void WKWebsitePoliciesSetDataStore(WKWebsitePoliciesRef, WKWebsiteDataStoreRef); 75 73 76 #ifdef __cplusplus 74 77 } -
trunk/Source/WebKit/UIProcess/WebFrameListenerProxy.cpp
r225954 r228472 28 28 29 29 #include "WebFrameProxy.h" 30 #include "WebsiteDataStore.h" 30 31 #include "WebsitePoliciesData.h" 31 32 … … 56 57 } 57 58 59 void WebFrameListenerProxy::changeWebsiteDataStore(WebsiteDataStore& websiteDataStore) 60 { 61 if (!m_frame) 62 return; 63 64 m_frame->changeWebsiteDataStore(websiteDataStore); 65 } 66 67 bool WebFrameListenerProxy::isMainFrame() const 68 { 69 if (!m_frame) 70 return false; 71 72 return m_frame->isMainFrame(); 73 } 74 58 75 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/WebFrameListenerProxy.h
r225954 r228472 35 35 36 36 class WebFrameProxy; 37 class WebsiteDataStore; 37 38 struct WebsitePoliciesData; 38 39 … … 45 46 46 47 void setNavigation(Ref<API::Navigation>&& navigation) { m_navigation = WTFMove(navigation); } 48 49 void changeWebsiteDataStore(WebsiteDataStore&); 50 bool isMainFrame() const; 47 51 48 52 protected: -
trunk/Source/WebKit/UIProcess/WebFramePolicyListenerProxy.cpp
r225954 r228472 28 28 29 29 #include "WebFrameProxy.h" 30 #include "WebsiteDataStore.h" 30 31 #include "WebsitePoliciesData.h" 31 32 -
trunk/Source/WebKit/UIProcess/WebFrameProxy.cpp
r225954 r228472 33 33 #include "WebPasteboardProxy.h" 34 34 #include "WebProcessPool.h" 35 #include "WebsiteDataStore.h" 35 36 #include "WebsitePoliciesData.h" 36 37 #include <WebCore/Image.h> … … 193 194 m_activeListener = WebFramePolicyListenerProxy::create(this, listenerID); 194 195 return *static_cast<WebFramePolicyListenerProxy*>(m_activeListener.get()); 196 } 197 198 void WebFrameProxy::changeWebsiteDataStore(WebsiteDataStore& websiteDataStore) 199 { 200 if (!m_page) 201 return; 202 203 m_page->changeWebsiteDataStore(websiteDataStore); 195 204 } 196 205 -
trunk/Source/WebKit/UIProcess/WebFrameProxy.h
r225954 r228472 52 52 class WebFramePolicyListenerProxy; 53 53 class WebPageProxy; 54 class WebsiteDataStore; 54 55 struct WebsitePoliciesData; 55 56 … … 117 118 void receivedPolicyDecision(WebCore::PolicyAction, uint64_t listenerID, API::Navigation*, std::optional<WebsitePoliciesData>&&); 118 119 WebFramePolicyListenerProxy& setUpPolicyListenerProxy(uint64_t listenerID); 120 void changeWebsiteDataStore(WebsiteDataStore&); 119 121 120 122 #if ENABLE(CONTENT_FILTERING)
Note: See TracChangeset
for help on using the changeset viewer.