Source/WebCore/ChangeLog

 12014-04-21 Dan Bernstein <mitz@apple.com>
 2
 3 WebCore part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
 4 https://bugs.webkit.org/show_bug.cgi?id=131939
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * WebCore.exp.in: Exported WebCore::ResourceHandle::setDefersLoading.
 9
 10 * loader/ResourceLoadScheduler.cpp:
 11 (WebCore::ResourceLoadScheduler::setDefersLoading): Added a no-op implementation.
 12 * loader/ResourceLoadScheduler.h: Declared new virtual member function setDefersLoading.
 13
 14 * loader/ResourceLoader.cpp:
 15 (WebCore::ResourceLoader::setDefersLoading): Added a call to the above function.
 16
1172014-04-21 Darin Adler <darin@apple.com>
218
319 REGRESSION (r160908): Safari doesn't draw rotated images properly first time
167599

Source/WebCore/WebCore.exp.in

@@__ZN7WebCore14ResourceBufferC2Ev
364364__ZN7WebCore14ResourceBufferD1Ev
365365__ZN7WebCore14ResourceBufferD2Ev
366366__ZN7WebCore14ResourceHandle12firstRequestEv
 367__ZN7WebCore14ResourceHandle16setDefersLoadingEb
367368__ZN7WebCore14ResourceHandle20forceContentSniffingEv
368369__ZN7WebCore14ResourceHandle23continueWillSendRequestERKNS_15ResourceRequestE
369370__ZN7WebCore14ResourceHandle25loadResourceSynchronouslyEPNS_17NetworkingContextERKNS_15ResourceRequestENS_17StoredCredentialsERNS_13ResourceErrorERNS_16ResourceResponseERN3WTF6VectorIcLm0ENSB_15CrashOnOverflowEEE
167599

Source/WebCore/loader/ResourceLoadScheduler.cpp

@@void ResourceLoadScheduler::remove(Resou
216216 scheduleServePendingRequests();
217217}
218218
 219void ResourceLoadScheduler::setDefersLoading(ResourceLoader*, bool)
 220{
 221}
 222
219223void ResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader* resourceLoader, const URL& redirectURL)
220224{
221225 HostInformation* oldHost = hostForURL(resourceLoader->url());
167599

Source/WebCore/loader/ResourceLoadScheduler.h

@@public:
5353 virtual PassRefPtr<SubresourceLoader> scheduleSubresourceLoad(Frame*, CachedResource*, const ResourceRequest&, ResourceLoadPriority, const ResourceLoaderOptions&);
5454 virtual PassRefPtr<NetscapePlugInStreamLoader> schedulePluginStreamLoad(Frame*, NetscapePlugInStreamLoaderClient*, const ResourceRequest&);
5555 virtual void remove(ResourceLoader*);
 56 virtual void setDefersLoading(ResourceLoader*, bool);
5657 virtual void crossOriginRedirectReceived(ResourceLoader*, const URL& redirectURL);
5758
5859 virtual void servePendingRequests(ResourceLoadPriority minimumPriority = ResourceLoadPriorityVeryLow);
167599

Source/WebCore/loader/ResourceLoader.cpp

@@void ResourceLoader::setDefersLoading(bo
187187 m_deferredRequest = ResourceRequest();
188188 start();
189189 }
 190
 191 platformStrategies()->loaderStrategy()->resourceLoadScheduler()->setDefersLoading(this, defers);
190192}
191193
192194FrameLoader* ResourceLoader::frameLoader() const
167599

Source/WebKit2/ChangeLog

 12014-04-21 Dan Bernstein <mitz@apple.com>
 2
 3 WebKit part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
 4 https://bugs.webkit.org/show_bug.cgi?id=131939
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * NetworkProcess/NetworkConnectionToWebProcess.cpp:
 9 (WebKit::NetworkConnectionToWebProcess::setDefersLoading): Added. Forwards the message to
 10 the NetworkResourceLoader.
 11 * NetworkProcess/NetworkConnectionToWebProcess.h:
 12
 13 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Added SetDefersLoading message.
 14
 15 * NetworkProcess/NetworkResourceLoader.cpp:
 16 (WebKit::NetworkResourceLoader::NetworkResourceLoader): Initialize new member variable
 17 m_defersLoading from the new field in the loader parameters.
 18 (WebKit::NetworkResourceLoader::start): Added. Like WebCore::ResourceLoader, if loading is
 19 deferred, keep the request in m_deferredRequest and bail out.
 20 (WebKit::NetworkResourceLoader::setDefersLoading): Added. Similar to
 21 WebCore::ResourceLoader::setDefersLoading.
 22 * NetworkProcess/NetworkResourceLoader.h:
 23 (WebKit::NetworkResourceLoader::defersLoading):
 24
 25 * Shared/Network/NetworkResourceLoadParameters.cpp:
 26 (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters): Initialize new field
 27 defersLoading to false.
 28 (WebKit::NetworkResourceLoadParameters::encode): Encode new field.
 29 (WebKit::NetworkResourceLoadParameters::decode): Decode new field.
 30 * Shared/Network/NetworkResourceLoadParameters.h: Added defersLoading field.
 31
 32 * WebProcess/Network/WebResourceLoadScheduler.cpp:
 33 (WebKit::WebResourceLoadScheduler::scheduleLoad): Populate defersLoading field in the load
 34 parameters.
 35 (WebKit::WebResourceLoadScheduler::setDefersLoading): Send a message to the Network process.
 36 * WebProcess/Network/WebResourceLoadScheduler.h:
 37
1382014-04-20 Dan Bernstein <mitz@apple.com>
239
340 [Cocoa] Remove interfaces in the To Be Removed groups
167599

Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp

@@void NetworkConnectionToWebProcess::remo
141141 loader->abort();
142142}
143143
 144void NetworkConnectionToWebProcess::setDefersLoading(ResourceLoadIdentifier identifier, bool defers)
 145{
 146 RefPtr<NetworkResourceLoader> loader = m_networkResourceLoaders.get(identifier);
 147 if (!loader)
 148 return;
 149
 150 loader->setDefersLoading(defers);
 151}
 152
144153void NetworkConnectionToWebProcess::servePendingRequests(uint32_t resourceLoadPriority)
145154{
146155 NetworkProcess::shared().networkResourceLoadScheduler().servePendingRequests(static_cast<ResourceLoadPriority>(resourceLoadPriority));
167599

Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h

@@private:
7373 void performSynchronousLoad(const NetworkResourceLoadParameters&, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply>);
7474
7575 void removeLoadIdentifier(ResourceLoadIdentifier);
 76 void setDefersLoading(ResourceLoadIdentifier, bool);
7677 void crossOriginRedirectReceived(ResourceLoadIdentifier, const WebCore::URL& redirectURL);
7778 void servePendingRequests(uint32_t resourceLoadPriority);
7879 void setSerialLoadingEnabled(bool);
167599

Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in

@@messages -> NetworkConnectionToWebProces
2727 ScheduleResourceLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters)
2828 PerformSynchronousLoad(WebKit::NetworkResourceLoadParameters resourceLoadParameters) -> (WebCore::ResourceError error, WebCore::ResourceResponse response, Vector<char> data) Delayed
2929 RemoveLoadIdentifier(uint64_t resourceLoadIdentifier)
 30 SetDefersLoading(uint64_t resourceLoadIdentifier, bool defers)
3031
3132 ServePendingRequests(uint32_t resourceLoadPriority)
3233
167599

Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp

@@NetworkResourceLoader::NetworkResourceLo
6767 , m_clientCredentialPolicy(parameters.clientCredentialPolicy)
6868 , m_shouldClearReferrerOnHTTPSToHTTPRedirect(parameters.shouldClearReferrerOnHTTPSToHTTPRedirect)
6969 , m_isLoadingMainResource(parameters.isMainResource)
 70 , m_defersLoading(parameters.defersLoading)
7071 , m_sandboxExtensionsAreConsumed(false)
7172 , m_connection(connection)
7273{

@@void NetworkResourceLoader::start()
129130 // FIXME (NetworkProcess): Set platform specific settings.
130131 m_networkingContext = RemoteNetworkingContext::create(m_sessionID, m_shouldClearReferrerOnHTTPSToHTTPRedirect);
131132
 133 if (m_defersLoading) {
 134 m_deferredRequest = m_request;
 135 return;
 136 }
 137
132138 consumeSandboxExtensions();
133139
134140 // FIXME (NetworkProcess): Pass an actual value for defersLoading
135141 m_handle = ResourceHandle::create(m_networkingContext.get(), m_request, this, false /* defersLoading */, m_contentSniffingPolicy == SniffContent);
136142}
137143
 144void NetworkResourceLoader::setDefersLoading(bool defers)
 145{
 146 m_defersLoading = defers;
 147 if (m_handle)
 148 m_handle->setDefersLoading(defers);
 149 if (!defers && !m_deferredRequest.isNull()) {
 150 m_request = m_deferredRequest;
 151 m_deferredRequest = ResourceRequest();
 152 start();
 153 }
 154}
 155
138156void NetworkResourceLoader::cleanup()
139157{
140158 ASSERT(RunLoop::isMain());
167599

Source/WebKit2/NetworkProcess/NetworkResourceLoader.h

@@public:
8080 void start();
8181 void abort();
8282
 83 void setDefersLoading(bool);
 84 bool defersLoading() const { return m_defersLoading; }
 85
8386 // ResourceHandleClient methods
8487 virtual void willSendRequestAsync(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) override;
8588 virtual void didSendData(WebCore::ResourceHandle*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;

@@private:
177180 uint64_t m_webFrameID;
178181 WebCore::SessionID m_sessionID;
179182 WebCore::ResourceRequest m_request;
 183 WebCore::ResourceRequest m_deferredRequest;
180184 WebCore::ResourceLoadPriority m_priority;
181185 WebCore::ContentSniffingPolicy m_contentSniffingPolicy;
182186 WebCore::StoredCredentials m_allowStoredCredentials;
183187 WebCore::ClientCredentialPolicy m_clientCredentialPolicy;
184188 bool m_shouldClearReferrerOnHTTPSToHTTPRedirect;
185189 bool m_isLoadingMainResource;
 190 bool m_defersLoading;
186191
187192 Vector<RefPtr<SandboxExtension>> m_requestBodySandboxExtensions;
188193 Vector<RefPtr<SandboxExtension>> m_resourceSandboxExtensions;
167599

Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp

@@NetworkResourceLoadParameters::NetworkRe
4848 , clientCredentialPolicy(DoNotAskClientForAnyCredentials)
4949 , shouldClearReferrerOnHTTPSToHTTPRedirect(true)
5050 , isMainResource(false)
 51 , defersLoading(false)
5152{
5253}
5354

@@void NetworkResourceLoadParameters::enco
9798 encoder.encodeEnum(clientCredentialPolicy);
9899 encoder << shouldClearReferrerOnHTTPSToHTTPRedirect;
99100 encoder << isMainResource;
 101 encoder << defersLoading;
100102}
101103
102104bool NetworkResourceLoadParameters::decode(IPC::ArgumentDecoder& decoder, NetworkResourceLoadParameters& result)

@@bool NetworkResourceLoadParameters::deco
148150 return false;
149151 if (!decoder.decode(result.isMainResource))
150152 return false;
 153 if (!decoder.decode(result.defersLoading))
 154 return false;
151155
152156 return true;
153157}
167599

Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.h

@@public:
6363 WebCore::ClientCredentialPolicy clientCredentialPolicy;
6464 bool shouldClearReferrerOnHTTPSToHTTPRedirect;
6565 bool isMainResource;
 66 bool defersLoading;
6667};
6768
6869} // namespace WebKit
167599

Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp

@@void WebResourceLoadScheduler::scheduleL
135135 loadParameters.clientCredentialPolicy = (webFrame && webPage) ? resourceLoader->clientCredentialPolicy() : DoNotAskClientForAnyCredentials;
136136 loadParameters.shouldClearReferrerOnHTTPSToHTTPRedirect = shouldClearReferrerOnHTTPSToHTTPRedirect;
137137 loadParameters.isMainResource = resource && resource->type() == CachedResource::MainResource;
 138 loadParameters.defersLoading = resourceLoader->defersLoading();
138139
139140 ASSERT((loadParameters.webPageID && loadParameters.webFrameID) || loadParameters.clientCredentialPolicy == DoNotAskClientForAnyCredentials);
140141

@@void WebResourceLoadScheduler::remove(Re
193194 loader->detachFromCoreLoader();
194195}
195196
 197void WebResourceLoadScheduler::setDefersLoading(ResourceLoader* resourceLoader, bool defers)
 198{
 199 ResourceLoadIdentifier identifier = resourceLoader->identifier();
 200 WebProcess::shared().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::SetDefersLoading(identifier, defers), 0);
 201}
 202
196203void WebResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader*, const URL&)
197204{
198205 // We handle cross origin redirects entirely within the NetworkProcess.
167599

Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h

@@public:
4949 virtual PassRefPtr<WebCore::NetscapePlugInStreamLoader> schedulePluginStreamLoad(WebCore::Frame*, WebCore::NetscapePlugInStreamLoaderClient*, const WebCore::ResourceRequest&) override;
5050
5151 virtual void remove(WebCore::ResourceLoader*) override;
 52 virtual void setDefersLoading(WebCore::ResourceLoader*, bool) override;
5253 virtual void crossOriginRedirectReceived(WebCore::ResourceLoader*, const WebCore::URL& redirectURL) override;
5354
5455 virtual void servePendingRequests(WebCore::ResourceLoadPriority minimumPriority = WebCore::ResourceLoadPriorityVeryLow) override;
167599