Have NetworkProcess manage resource load scheduling.
https://bugs.webkit.org/show_bug.cgi?id=100479

Reviewed by Alexey Proskuryakov.

Source/WebCore:

Down in WebCore we need to virtualize a handful of ResourceLoadScheduler methods
to be overridden by WebKit's implementation.

No new tests (No change in Core behavior).

* WebCore.exp.in:
* WebCore.xcodeproj/project.pbxproj:

* loader/ResourceLoadScheduler.cpp:
(WebCore::resourceLoadScheduler): Gracefully handle LoaderStrategies wanting to return the default scheduler.
(WebCore::ResourceLoadScheduler::scheduleLoad): Call notifyDidScheduleResourceRequest.
(WebCore::ResourceLoadScheduler::notifyDidScheduleResourceRequest): Moved InspectorInstrumentation call
  here so derived classes can do it indirectly.
(WebCore::ResourceLoadScheduler::startResourceLoader): To allow derived classes the ability to call
  ResourceLoader::start() which only ResourceLoadScheduler can do.

* loader/ResourceLoadScheduler.h:
(ResourceLoadScheduler): Virtualize some core public methods so they can be overridden.
(WebCore::ResourceLoadScheduler::setSerialLoadingEnabled): Make virtual.
(WebCore::ResourceLoadScheduler::isSuspendingPendingRequests): Make private as it's internal only.

* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::setIdentifier): Add this setter so outside clients can manually change the identifier.

* loader/ResourceLoader.h:
(WebCore::ResourceLoader::identifier): Change identifier to explicitly be uint64_t.
(WebCore::ResourceLoader::request): Make public.
(ResourceLoader):

Source/WebKit2:

Implement a ResourceLoadScheduler that models the same behavior as WebCore::ResourceLoadScheduler.

The WebProcess scheduler acts as a marshall to the NetworkProcess scheduler via CoreIPC messaging.

Besides MainResourceLoads which are started directly in the WebProcess, all other loads are now
started only when the NetworkProcess tells them to start.

Build-system and messaging related stuff:
* DerivedSources.make:
* Platform/CoreIPC/MessageID.h:
* WebKit2.xcodeproj/project.pbxproj:

Add a new Network logging channel.
* Platform/Logging.cpp:
(WebKit::getChannelFromName):
* Platform/Logging.h:

Modeled after ResourceLoadScheduler::HostInformation but more specifically geared towards what NetworkProcess needs to track:
* NetworkProcess/HostRecord.cpp: Added.
(WebKit::HostRecord::HostRecord):
(WebKit::HostRecord::~HostRecord):
(WebKit::HostRecord::schedule):
(WebKit::HostRecord::addLoadInProgress):
(WebKit::HostRecord::remove):
(WebKit::HostRecord::hasRequests):
(WebKit::HostRecord::limitRequests):
* NetworkProcess/HostRecord.h:
(WebKit::HostRecord::name):
(WebKit::HostRecord::requestsPending):

Gateway messaging from the WebResourceLoadScheduler to the NetworkResourceLoadScheduler:
* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
(WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
(WebKit::NetworkConnectionToWebProcess::registerObserver):
(WebKit::NetworkConnectionToWebProcess::unregisterObserver):
(WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
(WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
(WebKit::NetworkConnectionToWebProcess::didClose):
(WebKit::NetworkConnectionToWebProcess::scheduleNetworkRequest):
(WebKit::NetworkConnectionToWebProcess::addLoadInProgress):
(WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
(WebKit::NetworkConnectionToWebProcess::crossOriginRedirectReceived):
(WebKit::NetworkConnectionToWebProcess::servePendingRequests):
(WebKit::NetworkConnectionToWebProcess::suspendPendingRequests):
(WebKit::NetworkConnectionToWebProcess::resumePendingRequests):
(WebKit::NetworkConnectionToWebProcess::setSerialLoadingEnabled):
* NetworkProcess/NetworkConnectionToWebProcess.h:
(NetworkConnectionToWebProcessObserver): Add an observer interface so arbitrary objects can be notified if
  a Network->WebProcess connection closes.
(WebKit::NetworkConnectionToWebProcessObserver::~NetworkConnectionToWebProcessObserver):
(WebKit::NetworkConnectionToWebProcess::isSerialLoadingEnabled):
* NetworkProcess/NetworkConnectionToWebProcess.messages.in:

Represents a request,  ResourceLoadIdentifier, and connection that all correspond to the same pending NetworkLoad:
* NetworkProcess/NetworkRequest.cpp:
(WebKit::NetworkRequest::NetworkRequest):
(WebKit::NetworkRequest::~NetworkRequest):
(WebKit::NetworkRequest::connectionToWebProcessDidClose): Using the NetworkConnectionToWebProcessObserver interface,
  if the connection closes then clear out the connection pointer for this request that is now irrelevant.
* NetworkProcess/NetworkRequest.h:
(WebKit::NetworkRequest::create):
(WebKit::NetworkRequest::identifier):
(WebKit::NetworkRequest::connectionToWebProcess):

Manages connection-per-host scheduling with the same structure as WebCore::ResourceLoadScheduling but also with IPC:
* NetworkProcess/NetworkResourceLoadScheduler.cpp: Added.
(WebKit::NetworkResourceLoadScheduler::NetworkResourceLoadScheduler):
(WebKit::NetworkResourceLoadScheduler::scheduleServePendingRequests):
(WebKit::NetworkResourceLoadScheduler::requestTimerFired):
(WebKit::NetworkResourceLoadScheduler::scheduleNetworkRequest):
(WebKit::NetworkResourceLoadScheduler::addLoadInProgress):
(WebKit::NetworkResourceLoadScheduler::hostForURL):
(WebKit::NetworkResourceLoadScheduler::removeLoadIdentifier):
(WebKit::NetworkResourceLoadScheduler::crossOriginRedirectReceived):
(WebKit::NetworkResourceLoadScheduler::servePendingRequests):
(WebKit::NetworkResourceLoadScheduler::servePendingRequestsForHost): Serve as many requests for the host as we should,
  skipping the NetworkRequests who have lost their connection to their WebProcess.
(WebKit::NetworkResourceLoadScheduler::suspendPendingRequests):
(WebKit::NetworkResourceLoadScheduler::resumePendingRequests):
* NetworkProcess/NetworkResourceLoadScheduler.h: Added.
* NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm: Added.
(WebKit::NetworkResourceLoadScheduler::platformInitializeMaximumHTTPConnectionCountPerHost):

* NetworkProcess/NetworkProcess.h:
(WebKit::NetworkProcess::networkResourceLoadScheduler): Add a scheduler global to the NetworkProcess.

A thin derivation of WebCore::ResourceLoadScheduler, most of what WebResourceLoadScheduler does is handle IPC to the NetworkProcess:
* WebProcess/Network/WebResourceLoadScheduler.cpp:
(WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
(WebKit::WebResourceLoadScheduler::scheduleSubresourceLoad):
(WebKit::WebResourceLoadScheduler::schedulePluginStreamLoad):
(WebKit::WebResourceLoadScheduler::scheduleLoad):
(WebKit::WebResourceLoadScheduler::addMainResourceLoad):
(WebKit::WebResourceLoadScheduler::remove):
(WebKit::WebResourceLoadScheduler::crossOriginRedirectReceived):
(WebKit::WebResourceLoadScheduler::servePendingRequests):
(WebKit::WebResourceLoadScheduler::suspendPendingRequests):
(WebKit::WebResourceLoadScheduler::resumePendingRequests):
(WebKit::WebResourceLoadScheduler::setSerialLoadingEnabled):
(WebKit::WebResourceLoadScheduler::startResourceLoad):
* WebProcess/Network/WebResourceLoadScheduler.h:

Add the ability for the NetworkProcess to message back to the WebProcess telling it to start a resource load:
* WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::didReceiveMessage):
(WebKit::NetworkProcessConnection::didReceiveSyncMessage):
(WebKit::NetworkProcessConnection::startResourceLoad):
* WebProcess/Network/NetworkProcessConnection.h:
* WebProcess/Network/NetworkProcessConnection.messages.in:

* WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
(WebKit::WebPlatformStrategies::resourceLoadScheduler): Only return the WebResourceLoadScheduler if NetworkProcess is enabled.

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::ensureNetworkProcessConnection): Actually keep the NetworkProcessConnection around in a member variable.
(WebKit::WebProcess::networkConnection):
* WebProcess/WebProcess.h:
(WebKit::WebProcess::usesNetworkProcess): Expose this for platform strategies sake.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@132721 268f45cc-cd09-0410-ab3c-d52691b4dbfc
[BlackBerry] Browser prematurely sends wrong credentials
https://bugs.webkit.org/show_bug.cgi?id=100585

Reviewed by Yong Li.

Manually revert the patch for bug 96362, which causes regressions and the right patch has been
submitted with patch for bug 100448. Since the auto-revert fails, we use this patch to manually
revert.

No new tests. The test is coverted by patch for 100448.

* platform/network/blackberry/CredentialBackingStore.cpp:
* platform/network/blackberry/CredentialBackingStore.h:
(CredentialBackingStore):
* platform/network/blackberry/NetworkManager.cpp:
(WebCore::NetworkManager::startJob):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@132722 268f45cc-cd09-0410-ab3c-d52691b4dbfc