- Revision
- 197608
- Author
- [email protected]
- Date
- 2016-03-04 21:24:51 -0800 (Fri, 04 Mar 2016)
Log Message
Resource load statistics are not honoring private browsing
https://bugs.webkit.org/show_bug.cgi?id=155054
<rdar://problem/24987873>
Reviewed by Andy Estes.
Modify the points where we capture resource load statistics to ignore
loads made during private browsing. Do this by moving more of the logic
about whether to gather statistics into the logging functions, passing
the raw input types (frame, ResourceRequest, ResourceResponse) internally
so that we don't pay any cost until we decide we want to gather data.s
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::willSendRequest): Revise for the new API on
ResourceLoadObserver.
* loader/ResourceLoadObserver.cpp:
(WebCore::ResourceLoadObserver::logFrameNavigation): Revise signature and
check for private browsing.
(WebCore::ResourceLoadObserver::logSubresourceLoading): Ditto.
(WebCore::ResourceLoadObserver::logUserInteraction): Ditto.
* loader/ResourceLoadObserver.h:
* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::willSendRequestInternal): Ditto.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (197607 => 197608)
--- trunk/Source/WebCore/ChangeLog 2016-03-05 03:42:06 UTC (rev 197607)
+++ trunk/Source/WebCore/ChangeLog 2016-03-05 05:24:51 UTC (rev 197608)
@@ -1,3 +1,29 @@
+2016-03-04 Brent Fulgham <[email protected]>
+
+ Resource load statistics are not honoring private browsing
+ https://bugs.webkit.org/show_bug.cgi?id=155054
+ <rdar://problem/24987873>
+
+ Reviewed by Andy Estes.
+
+ Modify the points where we capture resource load statistics to ignore
+ loads made during private browsing. Do this by moving more of the logic
+ about whether to gather statistics into the logging functions, passing
+ the raw input types (frame, ResourceRequest, ResourceResponse) internally
+ so that we don't pay any cost until we decide we want to gather data.s
+
+ * loader/DocumentLoader.cpp:
+ (WebCore::DocumentLoader::willSendRequest): Revise for the new API on
+ ResourceLoadObserver.
+ * loader/ResourceLoadObserver.cpp:
+ (WebCore::ResourceLoadObserver::logFrameNavigation): Revise signature and
+ check for private browsing.
+ (WebCore::ResourceLoadObserver::logSubresourceLoading): Ditto.
+ (WebCore::ResourceLoadObserver::logUserInteraction): Ditto.
+ * loader/ResourceLoadObserver.h:
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::willSendRequestInternal): Ditto.
+
2016-03-04 Alex Christensen <[email protected]>
Fix file mime-types when using NetworkSession
Modified: trunk/Source/WebCore/loader/DocumentLoader.cpp (197607 => 197608)
--- trunk/Source/WebCore/loader/DocumentLoader.cpp 2016-03-05 03:42:06 UTC (rev 197607)
+++ trunk/Source/WebCore/loader/DocumentLoader.cpp 2016-03-05 05:24:51 UTC (rev 197608)
@@ -532,8 +532,7 @@
ASSERT(m_frame->document());
ASSERT(topFrame.document());
- if (Settings::resourceLoadStatisticsEnabled())
- ResourceLoadObserver::sharedObserver().logFrameNavigation(!redirectResponse.isNull(), m_frame->document()->url(), newRequest.url(), m_frame->isMainFrame(), topFrame.document()->url());
+ ResourceLoadObserver::sharedObserver().logFrameNavigation(*m_frame, topFrame, newRequest, redirectResponse);
// Update cookie policy base URL as URL changes, except for subframes, which use the
// URL of the main frame which doesn't change when we redirect.
Modified: trunk/Source/WebCore/loader/ResourceLoadObserver.cpp (197607 => 197608)
--- trunk/Source/WebCore/loader/ResourceLoadObserver.cpp 2016-03-05 03:42:06 UTC (rev 197607)
+++ trunk/Source/WebCore/loader/ResourceLoadObserver.cpp 2016-03-05 05:24:51 UTC (rev 197608)
@@ -27,11 +27,16 @@
#include "ResourceLoadObserver.h"
#include "Document.h"
+#include "Frame.h"
#include "Logging.h"
+#include "MainFrame.h"
#include "NetworkStorageSession.h"
+#include "Page.h"
#include "PlatformStrategies.h"
#include "ResourceLoadStatistics.h"
#include "ResourceLoadStatisticsStore.h"
+#include "ResourceRequest.h"
+#include "ResourceResponse.h"
#include "SecurityOrigin.h"
#include "Settings.h"
#include "SharedBuffer.h"
@@ -52,11 +57,25 @@
m_store = WTFMove(store);
}
-void ResourceLoadObserver::logFrameNavigation(bool isRedirect, const URL& sourceURL, const URL& targetURL, bool isMainFrame, const URL& mainFrameURL)
+void ResourceLoadObserver::logFrameNavigation(const Frame& frame, const Frame& topFrame, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse)
{
if (!Settings::resourceLoadStatisticsEnabled())
return;
+ ASSERT(frame.document());
+ ASSERT(topFrame.document());
+ ASSERT(topFrame.page());
+
+ bool needPrivacy = topFrame.page() ? topFrame.page()->usesEphemeralSession() : false;
+ if (needPrivacy)
+ return;
+
+ bool isRedirect = !redirectResponse.isNull();
+ bool isMainFrame = frame.isMainFrame();
+ const URL& sourceURL = frame.document()->url();
+ const URL& targetURL = newRequest.url();
+ const URL& mainFrameURL = topFrame.document()->url();
+
if (!targetURL.isValid() || !mainFrameURL.isValid())
return;
@@ -124,11 +143,20 @@
m_store->fireDataModificationHandler();
}
-void ResourceLoadObserver::logSubresourceLoading(bool isRedirect, const URL& sourceURL, const URL& targetURL, const URL& mainFrameURL)
+void ResourceLoadObserver::logSubresourceLoading(const Frame* frame, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse)
{
if (!Settings::resourceLoadStatisticsEnabled())
return;
+ bool needPrivacy = (frame && frame->page()) ? frame->page()->usesEphemeralSession() : false;
+ if (needPrivacy)
+ return;
+
+ bool isRedirect = !redirectResponse.isNull();
+ const URL& sourceURL = redirectResponse.url();
+ const URL& targetURL = newRequest.url();
+ const URL& mainFrameURL = frame ? frame->mainFrame().document()->url() : URL();
+
auto targetHost = targetURL.host();
auto mainFrameHost = mainFrameURL.host();
@@ -180,6 +208,10 @@
if (!Settings::resourceLoadStatisticsEnabled())
return;
+ bool needPrivacy = document.page() ? document.page()->usesEphemeralSession() : false;
+ if (needPrivacy)
+ return;
+
auto& statistics = m_store->resourceStatisticsForPrimaryDomain(primaryDomain(document.url()));
statistics.hadUserInteraction = true;
m_store->fireDataModificationHandler();
Modified: trunk/Source/WebCore/loader/ResourceLoadObserver.h (197607 => 197608)
--- trunk/Source/WebCore/loader/ResourceLoadObserver.h 2016-03-05 03:42:06 UTC (rev 197607)
+++ trunk/Source/WebCore/loader/ResourceLoadObserver.h 2016-03-05 05:24:51 UTC (rev 197608)
@@ -33,6 +33,9 @@
namespace WebCore {
class Document;
+class Frame;
+class ResourceRequest;
+class ResourceResponse;
class URL;
struct ResourceLoadStatistics;
@@ -42,10 +45,11 @@
public:
WEBCORE_EXPORT static ResourceLoadObserver& sharedObserver();
- void logFrameNavigation(bool isRedirect, const URL& sourceURL, const URL& targetURL, bool isMainFrame, const URL& mainFrameURL);
- void logSubresourceLoading(bool isRedirect, const URL& sourceURL, const URL& targetURL, const URL& mainFrameURL);
+ void logFrameNavigation(const Frame& frame, const Frame& topFrame, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse);
+ void logSubresourceLoading(const Frame*, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse);
+
void logUserInteraction(const Document&);
-
+
WEBCORE_EXPORT void setStatisticsStore(Ref<ResourceLoadStatisticsStore>&&);
WEBCORE_EXPORT String statisticsForOrigin(const String&);
Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (197607 => 197608)
--- trunk/Source/WebCore/loader/SubresourceLoader.cpp 2016-03-05 03:42:06 UTC (rev 197607)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp 2016-03-05 05:24:51 UTC (rev 197608)
@@ -191,8 +191,7 @@
if (newRequest.isNull())
cancel();
- if (Settings::resourceLoadStatisticsEnabled())
- ResourceLoadObserver::sharedObserver().logSubresourceLoading(!redirectResponse.isNull(), redirectResponse.url(), newRequest.url(), m_frame ? m_frame->mainFrame().document()->url() : URL());
+ ResourceLoadObserver::sharedObserver().logSubresourceLoading(m_frame.get(), newRequest, redirectResponse);
}
void SubresourceLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)