[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
andersca at apple.com
andersca at apple.com
Wed Dec 22 16:14:01 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 30168266f065b662a62bd526ee2290c94665378d
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Nov 19 22:15:14 2010 +0000
Implement support for loading local files
https://bugs.webkit.org/show_bug.cgi?id=49828
<rdar://problem/8447121>
Reviewed by Sam Weinig.
* UIProcess/WebPageProxy.cpp:
(WebKit::initializeSandboxExtensionHandle):
Given an URL, create a sandbox extension if it's a local file URL.
(WebKit::WebPageProxy::loadURL):
(WebKit::WebPageProxy::loadURLRequest):
Pass along sandbox extension handles to the LoadURL and LoadURLRequest messages.
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
Call SandboxExtensionTracker::didStartProvisionalLoad.
(WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
Call SandboxExtensionTracker::didCommitProvisionalLoad.
(WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
Call SandboxExtensionTracker::didFailProvisionalLoad.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::~WebPage):
Invalidate the sandbox extension tracker.
(WebKit::WebPage::close):
Invalidate the sandbox extension tracker.
(WebKit::WebPage::loadURL):
(WebKit::WebPage::loadURLRequest):
Pass the sandbox extension handle to the sandbox extension tracker.
(WebKit::WebPage::SandboxExtensionTracker::~SandboxExtensionTracker):
Invalidate the sandbox extension tracker.
(WebKit::WebPage::SandboxExtensionTracker::invalidate):
invalidate ell the sandbox extensions.
(WebKit::WebPage::SandboxExtensionTracker::beginLoad):
Create a sandbox extension and store it as the "pending provisional extension".
(WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
Consume the pending provisional extension and make it the provisional extension.
(WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad):
Invalidate the committed extension and make the provisional extension the committed extension.
(WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad):
Invalidate the provisional extension.
* WebProcess/WebPage/WebPage.messages.in:
Add SandboxExtension::Handle parameters to LoadURL and LoadURLRequest.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72438 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 21a8652..2030b05 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,63 @@
2010-11-19 Anders Carlsson <andersca at apple.com>
+ Reviewed by Sam Weinig.
+
+ Implement support for loading local files
+ https://bugs.webkit.org/show_bug.cgi?id=49828
+ <rdar://problem/8447121>
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::initializeSandboxExtensionHandle):
+ Given an URL, create a sandbox extension if it's a local file URL.
+
+ (WebKit::WebPageProxy::loadURL):
+ (WebKit::WebPageProxy::loadURLRequest):
+ Pass along sandbox extension handles to the LoadURL and LoadURLRequest messages.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
+ Call SandboxExtensionTracker::didStartProvisionalLoad.
+
+ (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
+ Call SandboxExtensionTracker::didCommitProvisionalLoad.
+
+ (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
+ Call SandboxExtensionTracker::didFailProvisionalLoad.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::~WebPage):
+ Invalidate the sandbox extension tracker.
+
+ (WebKit::WebPage::close):
+ Invalidate the sandbox extension tracker.
+
+ (WebKit::WebPage::loadURL):
+ (WebKit::WebPage::loadURLRequest):
+ Pass the sandbox extension handle to the sandbox extension tracker.
+
+ (WebKit::WebPage::SandboxExtensionTracker::~SandboxExtensionTracker):
+ Invalidate the sandbox extension tracker.
+
+ (WebKit::WebPage::SandboxExtensionTracker::invalidate):
+ invalidate ell the sandbox extensions.
+
+ (WebKit::WebPage::SandboxExtensionTracker::beginLoad):
+ Create a sandbox extension and store it as the "pending provisional extension".
+
+ (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
+ Consume the pending provisional extension and make it the provisional extension.
+
+ (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad):
+ Invalidate the committed extension and make the provisional extension the committed extension.
+
+ (WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad):
+ Invalidate the provisional extension.
+
+ * WebProcess/WebPage/WebPage.messages.in:
+ Add SandboxExtension::Handle parameters to LoadURL and LoadURLRequest.
+
+2010-11-19 Anders Carlsson <andersca at apple.com>
+
Reviewed by Darin Adler.
Make it possible to encode null SandboxExtension handles
diff --git a/WebKit2/UIProcess/WebPageProxy.cpp b/WebKit2/UIProcess/WebPageProxy.cpp
index d952400..68f0192 100644
--- a/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/WebKit2/UIProcess/WebPageProxy.cpp
@@ -257,12 +257,22 @@ bool WebPageProxy::tryClose()
return false;
}
+static void initializeSandboxExtensionHandle(const KURL& url, SandboxExtension::Handle& sandboxExtensionHandle)
+{
+ if (!url.isLocalFile())
+ return;
+
+ SandboxExtension::createHandle("/", SandboxExtension::ReadOnly, sandboxExtensionHandle);
+}
+
void WebPageProxy::loadURL(const String& url)
{
if (!isValid())
relaunch();
- process()->send(Messages::WebPage::LoadURL(url), m_pageID);
+ SandboxExtension::Handle sandboxExtensionHandle;
+ initializeSandboxExtensionHandle(KURL(KURL(), url), sandboxExtensionHandle);
+ process()->send(Messages::WebPage::LoadURL(url, sandboxExtensionHandle), m_pageID);
}
void WebPageProxy::loadURLRequest(WebURLRequest* urlRequest)
@@ -270,7 +280,9 @@ void WebPageProxy::loadURLRequest(WebURLRequest* urlRequest)
if (!isValid())
relaunch();
- process()->send(Messages::WebPage::LoadURLRequest(urlRequest->resourceRequest()), m_pageID);
+ SandboxExtension::Handle sandboxExtensionHandle;
+ initializeSandboxExtensionHandle(urlRequest->resourceRequest().url(), sandboxExtensionHandle);
+ process()->send(Messages::WebPage::LoadURLRequest(urlRequest->resourceRequest(), sandboxExtensionHandle), m_pageID);
}
void WebPageProxy::loadHTMLString(const String& htmlString, const String& baseURL)
diff --git a/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp b/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
index 03231f4..dae0ea3 100644
--- a/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
+++ b/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
@@ -291,7 +291,6 @@ void WebFrameLoaderClient::dispatchDidStartProvisionalLoad()
WebPage* webPage = m_frame->page();
if (!webPage)
return;
-
webPage->findController().hideFindUI();
DocumentLoader* provisionalLoader = m_frame->coreFrame()->loader()->provisionalDocumentLoader();
@@ -301,9 +300,10 @@ void WebFrameLoaderClient::dispatchDidStartProvisionalLoad()
// Notify the bundle client.
webPage->injectedBundleLoaderClient().didStartProvisionalLoadForFrame(webPage, m_frame, userData);
-
bool loadingSubstituteDataForUnreachableURL = !provisionalLoader->unreachableURL().isNull();
+ webPage->sandboxExtensionTracker().didStartProvisionalLoad(m_frame);
+
// Notify the UIProcess.
webPage->send(Messages::WebPageProxy::DidStartProvisionalLoadForFrame(m_frame->frameID(), url, loadingSubstituteDataForUnreachableURL, InjectedBundleUserMessageEncoder(userData.get())));
}
@@ -340,6 +340,8 @@ void WebFrameLoaderClient::dispatchDidCommitLoad()
// Notify the bundle client.
webPage->injectedBundleLoaderClient().didCommitLoadForFrame(webPage, m_frame, userData);
+ webPage->sandboxExtensionTracker().didCommitProvisionalLoad(m_frame);
+
// Notify the UIProcess.
webPage->send(Messages::WebPageProxy::DidCommitLoadForFrame(m_frame->frameID(), response.mimeType(), PlatformCertificateInfo(response), InjectedBundleUserMessageEncoder(userData.get())));
}
@@ -355,6 +357,8 @@ void WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& e
// Notify the bundle client.
webPage->injectedBundleLoaderClient().didFailProvisionalLoadWithErrorForFrame(webPage, m_frame, error, userData);
+ webPage->sandboxExtensionTracker().didFailProvisionalLoad(m_frame);
+
// Notify the UIProcess.
webPage->send(Messages::WebPageProxy::DidFailProvisionalLoadForFrame(m_frame->frameID(), error, InjectedBundleUserMessageEncoder(userData.get())));
diff --git a/WebKit2/WebProcess/WebPage/WebPage.cpp b/WebKit2/WebProcess/WebPage/WebPage.cpp
index 146df97..6159ca7 100644
--- a/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -162,6 +162,8 @@ WebPage::~WebPage()
ASSERT(!m_page);
+ m_sandboxExtensionTracker.invalidate();
+
#if PLATFORM(MAC)
ASSERT(m_pluginViews.isEmpty());
#endif
@@ -311,6 +313,8 @@ void WebPage::close()
m_activePopupMenu = 0;
}
+ m_sandboxExtensionTracker.invalidate();
+
m_mainFrame->coreFrame()->loader()->detachFromParent();
m_page.clear();
@@ -330,13 +334,14 @@ void WebPage::sendClose()
send(Messages::WebPageProxy::ClosePage());
}
-void WebPage::loadURL(const String& url)
+void WebPage::loadURL(const String& url, const SandboxExtension::Handle& sandboxExtensionHandle)
{
- loadURLRequest(ResourceRequest(KURL(KURL(), url)));
+ loadURLRequest(ResourceRequest(KURL(KURL(), url)), sandboxExtensionHandle);
}
-void WebPage::loadURLRequest(const ResourceRequest& request)
+void WebPage::loadURLRequest(const ResourceRequest& request, const SandboxExtension::Handle& sandboxExtensionHandle)
{
+ m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);
m_mainFrame->coreFrame()->loader()->load(request, false);
}
@@ -1099,7 +1104,79 @@ void WebPage::findZoomableAreaForPoint(const WebCore::IntPoint& point)
zoomableArea = node->getRect();
send(Messages::WebPageProxy::DidFindZoomableArea(zoomableArea));
}
-
#endif
+WebPage::SandboxExtensionTracker::~SandboxExtensionTracker()
+{
+ invalidate();
+}
+
+void WebPage::SandboxExtensionTracker::invalidate()
+{
+ if (m_pendingProvisionalSandboxExtension) {
+ m_pendingProvisionalSandboxExtension->invalidate();
+ m_pendingProvisionalSandboxExtension = 0;
+ }
+
+ if (m_provisionalSandboxExtension) {
+ m_provisionalSandboxExtension->invalidate();
+ m_provisionalSandboxExtension = 0;
+ }
+
+ if (m_committedSandboxExtension) {
+ m_committedSandboxExtension->invalidate();
+ m_committedSandboxExtension = 0;
+ }
+}
+
+void WebPage::SandboxExtensionTracker::beginLoad(WebFrame* frame, const SandboxExtension::Handle& handle)
+{
+ ASSERT(frame->isMainFrame());
+
+ ASSERT(!m_pendingProvisionalSandboxExtension);
+ m_pendingProvisionalSandboxExtension = SandboxExtension::create(handle);
+}
+
+void WebPage::SandboxExtensionTracker::didStartProvisionalLoad(WebFrame* frame)
+{
+ if (!frame->isMainFrame())
+ return;
+
+ ASSERT(!m_provisionalSandboxExtension);
+
+ m_provisionalSandboxExtension = m_pendingProvisionalSandboxExtension.release();
+ if (!m_provisionalSandboxExtension)
+ return;
+
+ m_provisionalSandboxExtension->consume();
+}
+
+void WebPage::SandboxExtensionTracker::didCommitProvisionalLoad(WebFrame* frame)
+{
+ if (!frame->isMainFrame())
+ return;
+
+ ASSERT(!m_pendingProvisionalSandboxExtension);
+
+ // The provisional load has been committed. Invalidate the currently committed sandbox
+ // extension and make the provisional sandbox extension the committed sandbox extension.
+ if (m_committedSandboxExtension)
+ m_committedSandboxExtension->invalidate();
+
+ m_committedSandboxExtension = m_provisionalSandboxExtension.release();
+}
+
+void WebPage::SandboxExtensionTracker::didFailProvisionalLoad(WebFrame* frame)
+{
+ if (!frame->isMainFrame())
+ return;
+
+ ASSERT(!m_pendingProvisionalSandboxExtension);
+ if (!m_provisionalSandboxExtension)
+ return;
+
+ m_provisionalSandboxExtension->invalidate();
+ m_provisionalSandboxExtension = 0;
+}
+
} // namespace WebKit
diff --git a/WebKit2/WebProcess/WebPage/WebPage.h b/WebKit2/WebProcess/WebPage/WebPage.h
index 6c3057c..fb05ebf 100644
--- a/WebKit2/WebProcess/WebPage/WebPage.h
+++ b/WebKit2/WebProcess/WebPage/WebPage.h
@@ -36,6 +36,7 @@
#include "InjectedBundlePageUIClient.h"
#include "MessageSender.h"
#include "Plugin.h"
+#include "SandboxExtension.h"
#include "WebEditCommand.h"
#include <WebCore/FrameLoaderTypes.h>
#include <WebCore/IntRect.h>
@@ -203,6 +204,24 @@ public:
WebContextMenu* contextMenu();
+ class SandboxExtensionTracker {
+ public:
+ ~SandboxExtensionTracker();
+
+ void invalidate();
+
+ void beginLoad(WebFrame*, const SandboxExtension::Handle& handle);
+ void didStartProvisionalLoad(WebFrame*);
+ void didCommitProvisionalLoad(WebFrame*);
+ void didFailProvisionalLoad(WebFrame*);
+ private:
+ RefPtr<SandboxExtension> m_pendingProvisionalSandboxExtension;
+ RefPtr<SandboxExtension> m_provisionalSandboxExtension;
+ RefPtr<SandboxExtension> m_committedSandboxExtension;
+ };
+
+ SandboxExtensionTracker& sandboxExtensionTracker() { return m_sandboxExtensionTracker; }
+
private:
WebPage(uint64_t pageID, const WebPageCreationParameters&);
@@ -221,8 +240,8 @@ private:
// Actions
void tryClose();
- void loadURL(const String&);
- void loadURLRequest(const WebCore::ResourceRequest&);
+ void loadURL(const String&, const SandboxExtension::Handle& sandboxExtensionHandle);
+ void loadURLRequest(const WebCore::ResourceRequest&, const SandboxExtension::Handle& sandboxExtensionHandle);
void loadHTMLString(const String& htmlString, const String& baseURL);
void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL);
void loadPlainTextString(const String&);
@@ -323,11 +342,10 @@ private:
RefPtr<PageOverlay> m_pageOverlay;
OwnPtr<WebInspector> m_inspector;
-
RefPtr<WebPopupMenu> m_activePopupMenu;
-
RefPtr<WebContextMenu> m_contextMenu;
+ SandboxExtensionTracker m_sandboxExtensionTracker;
uint64_t m_pageID;
};
diff --git a/WebKit2/WebProcess/WebPage/WebPage.messages.in b/WebKit2/WebProcess/WebPage/WebPage.messages.in
index 445a4e7..3f39487 100644
--- a/WebKit2/WebProcess/WebPage/WebPage.messages.in
+++ b/WebKit2/WebProcess/WebPage/WebPage.messages.in
@@ -38,8 +38,8 @@ messages -> WebPage {
LoadHTMLString(WTF::String htmlString, WTF::String baseURL)
LoadAlternateHTMLString(WTF::String htmlString, WTF::String baseURL, WTF::String unreachableURL);
LoadPlainTextString(WTF::String string)
- LoadURL(WTF::String url)
- LoadURLRequest(WebCore::ResourceRequest request)
+ LoadURL(WTF::String url, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
+ LoadURLRequest(WebCore::ResourceRequest request, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
Reload(bool reloadFromOrigin)
StopLoading()
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list