mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
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
49 lines
1.5 KiB
C++
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());
|
|
}
|
|
|
|
}
|