Commit 443bdcc4 authored by tyoshino@chromium.org's avatar tyoshino@chromium.org

Pass render frame ID to WebSocketBridge (Blink side)

The browser side code of the new WebSocket stack needs to
know the ID of the render frame where the corresponding
WebSocketBridge is created in order to handle certificate errors.

This CL just ports the code used by the old WebSocket
implementation to new one.

This CL also contains clean up on the old stack.

Chromium side change: https://codereview.chromium.org/308513004/

BUG=364361

Review URL: https://codereview.chromium.org/304113002

git-svn-id: svn://svn.chromium.org/blink/trunk@175154 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 54bd8709
......@@ -49,6 +49,7 @@ class WebCookieJar;
class WebRTCPeerConnectionHandler;
class WebServiceWorkerProvider;
class WebServiceWorkerProviderClient;
class WebSocketHandle;
class WebApplicationCacheHost;
class WebApplicationCacheHostClient;
}
......@@ -204,6 +205,7 @@ namespace WebCore {
virtual void didChangeName(const String&) { }
virtual void dispatchWillOpenSocketStream(SocketStreamHandle*) { }
virtual void dispatchWillOpenWebSocket(blink::WebSocketHandle*) { }
virtual void dispatchWillStartUsingPeerConnectionHandler(blink::WebRTCPeerConnectionHandler*) { }
......
......@@ -113,7 +113,14 @@ bool MainThreadWebSocketChannel::connect(const KURL& url, const String& protocol
InspectorInstrumentation::didCreateWebSocket(m_document, m_identifier, url, protocol);
}
ref();
m_handle = SocketStreamHandle::create(m_handshake->url(), this);
m_handle = SocketStreamHandle::create(this);
ASSERT(m_handle);
if (m_document->frame()) {
m_document->frame()->loader().client()->dispatchWillOpenSocketStream(m_handle.get());
}
m_handle->connect(m_handshake->url());
return true;
}
......@@ -270,14 +277,6 @@ void MainThreadWebSocketChannel::resume()
m_resumeTimer.startOneShot(0, FROM_HERE);
}
void MainThreadWebSocketChannel::willOpenSocketStream(SocketStreamHandle* handle)
{
WTF_LOG(Network, "MainThreadWebSocketChannel %p willOpenSocketStream()", this);
ASSERT(handle);
if (m_document->frame())
m_document->frame()->loader().client()->dispatchWillOpenSocketStream(handle);
}
void MainThreadWebSocketChannel::didOpenSocketStream(SocketStreamHandle* handle)
{
WTF_LOG(Network, "MainThreadWebSocketChannel %p didOpenSocketStream()", this);
......
......@@ -89,7 +89,6 @@ public:
virtual void resume() OVERRIDE;
// SocketStreamHandleClient functions.
virtual void willOpenSocketStream(SocketStreamHandle*) OVERRIDE;
virtual void didOpenSocketStream(SocketStreamHandle*) OVERRIDE;
virtual void didCloseSocketStream(SocketStreamHandle*) OVERRIDE;
virtual void didReceiveSocketStreamData(SocketStreamHandle*, const char*, int) OVERRIDE;
......
......@@ -39,6 +39,7 @@
#include "core/inspector/InspectorInstrumentation.h"
#include "core/inspector/InspectorTraceEvents.h"
#include "core/loader/FrameLoader.h"
#include "core/loader/FrameLoaderClient.h"
#include "core/loader/MixedContentChecker.h"
#include "core/loader/UniqueIdentifier.h"
#include "modules/websockets/WebSocketChannelClient.h"
......@@ -154,7 +155,11 @@ bool NewWebSocketChannelImpl::connect(const KURL& url, const String& protocol)
for (size_t i = 0; i < protocols.size(); ++i) {
webProtocols[i] = protocols[i];
}
if (executionContext()->isDocument() && document()->frame())
document()->frame()->loader().client()->dispatchWillOpenWebSocket(m_handle.get());
m_handle->connect(url, webProtocols, *executionContext()->securityOrigin(), this);
flowControlIfNecessary();
if (m_identifier) {
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "WebSocketCreate", "data", InspectorWebSocketCreateEvent::data(document(), m_identifier, url, protocol));
......
......@@ -47,6 +47,7 @@ static const unsigned bufferSize = 100 * 1024 * 1024;
SocketStreamHandleInternal::SocketStreamHandleInternal(SocketStreamHandle* handle)
: m_handle(handle)
, m_socket(adoptPtr(blink::Platform::current()->createSocketStreamHandle()))
, m_maxPendingSendAllowed(0)
, m_pendingAmountSent(0)
{
......@@ -59,12 +60,9 @@ SocketStreamHandleInternal::~SocketStreamHandleInternal()
void SocketStreamHandleInternal::connect(const KURL& url)
{
m_socket = adoptPtr(blink::Platform::current()->createSocketStreamHandle());
WTF_LOG(Network, "SocketStreamHandleInternal %p connect()", this);
ASSERT(m_socket);
ASSERT(m_handle);
if (m_handle->m_client)
m_handle->m_client->willOpenSocketStream(m_handle);
m_socket->connect(url, this);
}
......@@ -163,13 +161,16 @@ void SocketStreamHandleInternal::didFail(blink::WebSocketStreamHandle* socketHan
// SocketStreamHandle ----------------------------------------------------------
SocketStreamHandle::SocketStreamHandle(const KURL& url, SocketStreamHandleClient* client)
: m_url(url)
, m_client(client)
SocketStreamHandle::SocketStreamHandle(SocketStreamHandleClient* client)
: m_client(client)
, m_state(Connecting)
{
m_internal = SocketStreamHandleInternal::create(this);
m_internal->connect(m_url);
}
void SocketStreamHandle::connect(const KURL& url)
{
m_internal->connect(url);
}
SocketStreamHandle::~SocketStreamHandle()
......
......@@ -47,11 +47,12 @@ class PLATFORM_EXPORT SocketStreamHandle : public RefCounted<SocketStreamHandle>
public:
enum SocketStreamState { Connecting, Open, Closing, Closed };
static PassRefPtr<SocketStreamHandle> create(const KURL& url, SocketStreamHandleClient* client) { return adoptRef(new SocketStreamHandle(url, client)); }
static PassRefPtr<SocketStreamHandle> create(SocketStreamHandleClient* client) { return adoptRef(new SocketStreamHandle(client)); }
virtual ~SocketStreamHandle();
SocketStreamState state() const;
void connect(const KURL&);
bool send(const char* data, int length);
void close(); // Disconnect after all data in buffer are sent.
void disconnect();
......@@ -61,14 +62,13 @@ public:
void setClient(SocketStreamHandleClient*);
private:
SocketStreamHandle(const KURL&, SocketStreamHandleClient*);
SocketStreamHandle(SocketStreamHandleClient*);
bool sendPendingData();
int sendInternal(const char* data, int length);
void closeInternal();
KURL m_url;
SocketStreamHandleClient* m_client;
StreamBuffer<char, 1024 * 1024> m_buffer;
SocketStreamState m_state;
......
......@@ -42,7 +42,6 @@ class SocketStreamHandleClient {
public:
virtual ~SocketStreamHandleClient() { }
virtual void willOpenSocketStream(SocketStreamHandle*) { }
virtual void didOpenSocketStream(SocketStreamHandle*) { }
virtual void didCloseSocketStream(SocketStreamHandle*) { }
virtual void didReceiveSocketStreamData(SocketStreamHandle*, const char* /*data*/, int /*length*/) { }
......
......@@ -744,6 +744,11 @@ void FrameLoaderClientImpl::dispatchWillOpenSocketStream(SocketStreamHandle* han
m_webFrame->client()->willOpenSocketStream(SocketStreamHandleInternal::toWebSocketStreamHandle(handle));
}
void FrameLoaderClientImpl::dispatchWillOpenWebSocket(blink::WebSocketHandle* handle)
{
m_webFrame->client()->willOpenWebSocket(handle);
}
void FrameLoaderClientImpl::dispatchWillStartUsingPeerConnectionHandler(blink::WebRTCPeerConnectionHandler* handler)
{
m_webFrame->client()->willStartUsingPeerConnectionHandler(webFrame(), handler);
......
......@@ -142,6 +142,7 @@ public:
virtual void didChangeName(const String&) OVERRIDE;
virtual void dispatchWillOpenSocketStream(WebCore::SocketStreamHandle*) OVERRIDE;
virtual void dispatchWillOpenWebSocket(blink::WebSocketHandle*) OVERRIDE;
virtual void dispatchWillStartUsingPeerConnectionHandler(blink::WebRTCPeerConnectionHandler*) OVERRIDE;
......
......@@ -69,6 +69,7 @@ class WebMediaPlayerClient;
class WebNotificationPresenter;
class WebServiceWorkerProvider;
class WebServiceWorkerProviderClient;
class WebSocketHandle;
class WebNode;
class WebPlugin;
class WebRTCPeerConnectionHandler;
......@@ -439,9 +440,14 @@ public:
// WebSocket -----------------------------------------------------
// A WebSocket object is going to open new stream connection.
// A WebSocket object is going to open a new socket stream connection. Used
// by the old WebSocket implementation.
virtual void willOpenSocketStream(WebSocketStreamHandle*) { }
// A WebSocket object is going to open a new WebSocket connection. Used by
// the new WebSocket implementation.
virtual void willOpenWebSocket(WebSocketHandle*) { }
// MediaStream -----------------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment