Adam Barth 61a2a00c78 Live the dream
This CL plumbs the data pipe from the network stack all the way to the parser
thread. We now drain the data pipe on the parser thread, which means network
bytes don't need to transit the main thread to reach the parser.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/664573004
2014-10-24 16:51:56 -07:00

49 lines
1.5 KiB
C++

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "config.h"
#include "core/loader/MojoLoader.h"
#include "core/dom/Document.h"
#include "core/dom/DocumentInit.h"
#include "core/frame/LocalDOMWindow.h"
#include "core/frame/LocalFrame.h"
#include "mojo/public/cpp/system/data_pipe.h"
#include "core/loader/FrameLoaderClient.h"
#include "core/page/Page.h"
#include "core/dom/DocumentParser.h"
namespace blink {
using namespace mojo;
MojoLoader::MojoLoader(LocalFrame& frame)
: m_frame(frame)
{
}
void MojoLoader::load(const KURL& url, ScopedDataPipeConsumerHandle responseStream)
{
DocumentInit init(url, &m_frame);
init.withNewRegistrationContext();
// FIXME(sky): Poorly named method for creating the FrameView:
m_frame.loaderClient()->transitionToCommittedForNewPage();
// Only needed for UseCounter, and thus probably can be removed:
m_frame.page()->didCommitLoad(&m_frame);
m_frame.setDOMWindow(LocalDOMWindow::create(m_frame));
RefPtr<Document> document = m_frame.domWindow()->installNewDocument(init);
// Unclear if we care about DocumentLoadTiming in Sky.
document->timing()->markNavigationStart();
document->setReadyState(Document::Loading);
// FIXME: This should read the Content-Language out of the
// response headers and set them on Document::contentLanguage.
document->startParsing();
document->parser()->parse(responseStream.Pass());
}
}