Title: [115765] trunk/Source
Revision
115765
Author
jp...@apple.com
Date
2012-05-01 17:17:06 -0700 (Tue, 01 May 2012)

Log Message

<rdar://problem/10422318> Support for web content filter delegate for filtering https content
https://bugs.webkit.org/show_bug.cgi?id=85300

Reviewed by Alexey Proskuryakov.

Source/WebCore:

No new tests.

* WebCore.exp.in:
* loader/MainResourceLoader.cpp:
(WebCore::MainResourceLoader::MainResourceLoader):
(WebCore::MainResourceLoader::~MainResourceLoader):
(WebCore::MainResourceLoader::didCancel):
(WebCore::MainResourceLoader::didReceiveResponse):
(WebCore::MainResourceLoader::didReceiveData):
(WebCore::MainResourceLoader::didFinishLoading):
(WebCore::MainResourceLoader::didFail):
* loader/MainResourceLoader.h:
(MainResourceLoader):
* platform/mac/WebCoreSystemInterface.h:
* platform/mac/WebCoreSystemInterface.mm:

Source/WebKit/mac:

* WebCoreSupport/WebSystemInterface.mm:
(InitWebCoreSystemInterface):

Source/WebKit2:

* WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
(InitWebCoreSystemInterface):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (115764 => 115765)


--- trunk/Source/WebCore/ChangeLog	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebCore/ChangeLog	2012-05-02 00:17:06 UTC (rev 115765)
@@ -1,3 +1,26 @@
+2012-05-01  Jeffrey Pfau  <jp...@apple.com>
+
+        <rdar://problem/10422318> Support for web content filter delegate for filtering https content
+        https://bugs.webkit.org/show_bug.cgi?id=85300
+
+        Reviewed by Alexey Proskuryakov.
+
+        No new tests.
+
+        * WebCore.exp.in:
+        * loader/MainResourceLoader.cpp:
+        (WebCore::MainResourceLoader::MainResourceLoader):
+        (WebCore::MainResourceLoader::~MainResourceLoader):
+        (WebCore::MainResourceLoader::didCancel):
+        (WebCore::MainResourceLoader::didReceiveResponse):
+        (WebCore::MainResourceLoader::didReceiveData):
+        (WebCore::MainResourceLoader::didFinishLoading):
+        (WebCore::MainResourceLoader::didFail):
+        * loader/MainResourceLoader.h:
+        (MainResourceLoader):
+        * platform/mac/WebCoreSystemInterface.h:
+        * platform/mac/WebCoreSystemInterface.mm:
+
 2012-05-01  Kent Tamura  <tk...@chromium.org>
 
         Calendar Picker: Add capability to add platform-specific style sheet

Modified: trunk/Source/WebCore/WebCore.exp.in (115764 => 115765)


--- trunk/Source/WebCore/WebCore.exp.in	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebCore/WebCore.exp.in	2012-05-02 00:17:06 UTC (rev 115765)
@@ -1679,6 +1679,15 @@
 _wkGetBytesFromAXTextMarker
 _wkCreateAXUIElementRef
 
+#if !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+_wkFilterIsManagedSession
+_wkFilterCreateInstance
+_wkFilterRelease
+_wkFilterWasBlocked
+_wkFilterAddData
+_wkFilterDataComplete
+#endif
+
 #if ENABLE(SVG)
 __ZN7WebCore14SVGSMILElement13isSMILElementEPNS_4NodeE
 __ZN7WebCore8Document13svgExtensionsEv

Modified: trunk/Source/WebCore/loader/MainResourceLoader.cpp (115764 => 115765)


--- trunk/Source/WebCore/loader/MainResourceLoader.cpp	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebCore/loader/MainResourceLoader.cpp	2012-05-02 00:17:06 UTC (rev 115765)
@@ -57,6 +57,10 @@
 #include "PluginDatabase.h"
 #endif
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+#include "WebCoreSystemInterface.h"
+#endif
+
 // FIXME: More that is in common with SubresourceLoader should move up into ResourceLoader.
 
 namespace WebCore {
@@ -72,11 +76,17 @@
     , m_loadingMultipartContent(false)
     , m_waitingForContentPolicy(false)
     , m_timeOfLastDataReceived(0.0)
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    , m_filter(0)
+#endif
 {
 }
 
 MainResourceLoader::~MainResourceLoader()
 {
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    ASSERT(!m_filter);
+#endif
 }
 
 PassRefPtr<MainResourceLoader> MainResourceLoader::create(Frame* frame)
@@ -123,6 +133,13 @@
     // We should notify the frame loader after fully canceling the load, because it can do complicated work
     // like calling DOMWindow::print(), during which a half-canceled load could try to finish.
     documentLoader()->mainReceivedError(error);
+
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    if (m_filter) {
+        wkFilterRelease(m_filter);
+        m_filter = 0;
+    }
+#endif
 }
 
 ResourceError MainResourceLoader::interruptedForPolicyChangeError() const
@@ -424,6 +441,11 @@
     }
 #endif
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    if (r.url().protocolIs("https") && wkFilterIsManagedSession())
+        m_filter = wkFilterCreateInstance(r.nsURLResponse());
+#endif
+
     frameLoader()->policyChecker()->checkContentPolicy(m_response, callContinueAfterContentPolicy, this);
 }
 
@@ -449,6 +471,22 @@
     ASSERT(!defersLoading());
 #endif
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    if (m_filter) {
+        ASSERT(!wkFilterWasBlocked(m_filter));
+        const char* blockedData = wkFilterAddData(m_filter, data, &length);
+        // If we don't have blockedData, that means we're still accumulating data
+        if (!blockedData) {
+            // Transition to committed state.
+            ResourceLoader::didReceiveData("", 0, 0, false);
+            return;
+        }
+
+        data = ""
+        encodedDataLength = -1;
+    }
+#endif
+
     documentLoader()->applicationCacheHost()->mainResourceDataReceived(data, length, encodedDataLength, allAtOnce);
 
     // The additional processing can do anything including possibly removing the last
@@ -458,6 +496,19 @@
     m_timeOfLastDataReceived = monotonicallyIncreasingTime();
 
     ResourceLoader::didReceiveData(data, length, encodedDataLength, allAtOnce);
+
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    if (WebFilterEvaluator *filter = m_filter) {
+        // If we got here, it means we know if we were blocked or not. If we were blocked, we're
+        // done loading the page altogether. Either way, we don't need the filter anymore.
+
+        // Remove this->m_filter early so didFinishLoading doesn't see it.
+        m_filter = 0;
+        if (wkFilterWasBlocked(filter))
+            cancel();
+        wkFilterRelease(filter);
+    }
+#endif
 }
 
 void MainResourceLoader::didFinishLoading(double finishTime)
@@ -473,6 +524,19 @@
     RefPtr<MainResourceLoader> protect(this);
     RefPtr<DocumentLoader> dl = documentLoader();
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    if (m_filter) {
+        int length;
+        const char* data = "" &length);
+        WebFilterEvaluator *filter = m_filter;
+        // Remove this->m_filter early so didReceiveData doesn't see it.
+        m_filter = 0;
+        if (data)
+            didReceiveData(data, length, -1, false);
+        wkFilterRelease(filter);
+    }
+#endif
+
     if (m_loadingMultipartContent)
         dl->maybeFinishLoadingMultipartContent();
 
@@ -485,6 +549,13 @@
 
 void MainResourceLoader::didFail(const ResourceError& error)
 {
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    if (m_filter) {
+        wkFilterRelease(m_filter);
+        m_filter = 0;
+    }
+#endif
+
     if (documentLoader()->applicationCacheHost()->maybeLoadFallbackForMainError(request(), error))
         return;
 

Modified: trunk/Source/WebCore/loader/MainResourceLoader.h (115764 => 115765)


--- trunk/Source/WebCore/loader/MainResourceLoader.h	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebCore/loader/MainResourceLoader.h	2012-05-02 00:17:06 UTC (rev 115765)
@@ -34,6 +34,10 @@
 #include "SubstituteData.h"
 #include <wtf/Forward.h>
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+OBJC_CLASS WebFilterEvaluator;
+#endif
+
 #if HAVE(RUNLOOP_TIMER)
 #include "RunLoopTimer.h"
 #else
@@ -109,6 +113,10 @@
         bool m_loadingMultipartContent;
         bool m_waitingForContentPolicy;
         double m_timeOfLastDataReceived;
+
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+        WebFilterEvaluator *m_filter;
+#endif
     };
 
 }

Modified: trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h (115764 => 115765)


--- trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h	2012-05-02 00:17:06 UTC (rev 115765)
@@ -102,6 +102,7 @@
 OBJC_CLASS NSWindow;
 OBJC_CLASS QTMovie;
 OBJC_CLASS QTMovieView;
+OBJC_CLASS WebFilterEvaluator;
 
 extern "C" {
 
@@ -311,6 +312,15 @@
 extern void (*wkCGPathAddRoundedRect)(CGMutablePathRef path, const CGAffineTransform* matrix, CGRect rect, CGFloat cornerWidth, CGFloat cornerHeight);
 #endif
 
+#if !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+extern BOOL (*wkFilterIsManagedSession)(void);
+extern WebFilterEvaluator *(*wkFilterCreateInstance)(NSURLResponse *);
+extern void (*wkFilterRelease)(WebFilterEvaluator *);
+extern BOOL (*wkFilterWasBlocked)(WebFilterEvaluator *);
+extern const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length);
+extern const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length);
+#endif
+
 }
 
 #endif

Modified: trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm (115764 => 115765)


--- trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm	2012-05-02 00:17:06 UTC (rev 115765)
@@ -190,3 +190,12 @@
 #if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
 void (*wkCGPathAddRoundedRect)(CGMutablePathRef path, const CGAffineTransform* matrix, CGRect rect, CGFloat cornerWidth, CGFloat cornerHeight);
 #endif
+
+#if !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+BOOL (*wkFilterIsManagedSession)(void);
+WebFilterEvaluator *(*wkFilterCreateInstance)(NSURLResponse *);
+void (*wkFilterRelease)(WebFilterEvaluator *);
+BOOL (*wkFilterWasBlocked)(WebFilterEvaluator *);
+const char* (*wkFilterAddData)(WebFilterEvaluator *, const char* data, int* length);
+const char* (*wkFilterDataComplete)(WebFilterEvaluator *, int* length);
+#endif

Modified: trunk/Source/WebKit/mac/ChangeLog (115764 => 115765)


--- trunk/Source/WebKit/mac/ChangeLog	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebKit/mac/ChangeLog	2012-05-02 00:17:06 UTC (rev 115765)
@@ -1,3 +1,13 @@
+2012-05-01  Jeffrey Pfau  <jp...@apple.com>
+
+        <rdar://problem/10422318> Support for web content filter delegate for filtering https content
+        https://bugs.webkit.org/show_bug.cgi?id=85300
+
+        Reviewed by Alexey Proskuryakov.
+
+        * WebCoreSupport/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+
 2012-05-01  Ryosuke Niwa  <rn...@webkit.org>
 
         *Command.h files shouldn't be exported to WebKit layer

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm (115764 => 115765)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm	2012-05-02 00:17:06 UTC (rev 115765)
@@ -184,5 +184,13 @@
     INIT(CGPathAddRoundedRect);
 #endif
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+    INIT(FilterIsManagedSession);
+    INIT(FilterCreateInstance);
+    INIT(FilterRelease);
+    INIT(FilterWasBlocked);
+    INIT(FilterAddData);
+    INIT(FilterDataComplete);
+#endif
     didInit = true;
 }

Modified: trunk/Source/WebKit2/ChangeLog (115764 => 115765)


--- trunk/Source/WebKit2/ChangeLog	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebKit2/ChangeLog	2012-05-02 00:17:06 UTC (rev 115765)
@@ -1,3 +1,13 @@
+2012-05-01  Jeffrey Pfau  <jp...@apple.com>
+
+        <rdar://problem/10422318> Support for web content filter delegate for filtering https content
+        https://bugs.webkit.org/show_bug.cgi?id=85300
+
+        Reviewed by Alexey Proskuryakov.
+
+        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+
 2012-05-01  Ryosuke Niwa  <rn...@webkit.org>
 
         *Command.h files shouldn't be exported to WebKit layer

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm (115764 => 115765)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2012-05-02 00:12:49 UTC (rev 115764)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2012-05-02 00:17:06 UTC (rev 115765)
@@ -171,5 +171,14 @@
         INIT(CGPathAddRoundedRect);
 #endif
 
+#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION) && !PLATFORM(IOS)
+        INIT(FilterIsManagedSession);
+        INIT(FilterCreateInstance);
+        INIT(FilterRelease);
+        INIT(FilterWasBlocked);
+        INIT(FilterAddData);
+        INIT(FilterDataComplete);
+#endif
+
     });
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to