| Index: sky/engine/core/html/HTMLIFrameElement.cpp
|
| diff --git a/sky/engine/core/html/HTMLIFrameElement.cpp b/sky/engine/core/html/HTMLIFrameElement.cpp
|
| index 9fb3e0ba9181bb059bfb8ab18fe566376a4b88e3..d47b2f5048e71194a2ffda88e55da98ff1d30377 100644
|
| --- a/sky/engine/core/html/HTMLIFrameElement.cpp
|
| +++ b/sky/engine/core/html/HTMLIFrameElement.cpp
|
| @@ -34,8 +34,11 @@ HTMLIFrameElement::~HTMLIFrameElement()
|
| void HTMLIFrameElement::insertedInto(ContainerNode* insertionPoint)
|
| {
|
| HTMLElement::insertedInto(insertionPoint);
|
| - if (insertionPoint->inDocument())
|
| - createView();
|
| + if (insertionPoint->inDocument()) {
|
| + if (LocalFrame* frame = document().frame())
|
| + m_contentView = frame->loaderClient()->createChildFrame();
|
| + navigateView();
|
| + }
|
| }
|
|
|
| void HTMLIFrameElement::removedFrom(ContainerNode* insertionPoint)
|
| @@ -45,6 +48,15 @@ void HTMLIFrameElement::removedFrom(ContainerNode* insertionPoint)
|
| m_contentView->Destroy();
|
| }
|
|
|
| +void HTMLIFrameElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
|
| +{
|
| + if (name == HTMLNames::srcAttr) {
|
| + navigateView();
|
| + } else {
|
| + HTMLElement::parseAttribute(name, value);
|
| + }
|
| +}
|
| +
|
| RenderObject* HTMLIFrameElement::createRenderer(RenderStyle* style)
|
| {
|
| return new RenderIFrame(this);
|
| @@ -56,29 +68,33 @@ void HTMLIFrameElement::OnViewDestroyed(mojo::View* view)
|
| m_contentView = nullptr;
|
| }
|
|
|
| -ScriptValue HTMLIFrameElement::takeServiceProvider(ScriptState* scriptState)
|
| +ScriptValue HTMLIFrameElement::takeServicesHandle(ScriptState* scriptState)
|
| {
|
| return ScriptValue(scriptState, gin::ConvertToV8(scriptState->isolate(), m_services.PassMessagePipe().release()));
|
| }
|
|
|
| -void HTMLIFrameElement::createView()
|
| +ScriptValue HTMLIFrameElement::takeExposedServicesHandle(ScriptState* scriptState)
|
| {
|
| + return ScriptValue(scriptState, gin::ConvertToV8(scriptState->isolate(), m_exposedServices.release()));
|
| +}
|
| +
|
| +void HTMLIFrameElement::navigateView()
|
| +{
|
| + if (!m_contentView)
|
| + return;
|
| +
|
| String urlString = stripLeadingAndTrailingHTMLSpaces(getAttribute(HTMLNames::srcAttr));
|
| if (urlString.isEmpty())
|
| urlString = blankURL().string();
|
|
|
| - LocalFrame* parentFrame = document().frame();
|
| - if (!parentFrame)
|
| - return;
|
| -
|
| KURL url = document().completeURL(urlString);
|
| - m_contentView = parentFrame->loaderClient()->createChildFrame();
|
| - if (!m_contentView)
|
| - return;
|
| +
|
| + mojo::MessagePipe exposedServicesPipe;
|
| + m_exposedServices = exposedServicesPipe.handle0.Pass();
|
|
|
| m_contentView->Embed(mojo::String::From(url.string().utf8().data()),
|
| - GetProxy(&m_services),
|
| - nullptr); // TODO(abarth) Expose the exposedService parameter.
|
| + mojo::GetProxy(&m_services),
|
| + mojo::MakeProxy<mojo::ServiceProvider>(exposedServicesPipe.handle1.Pass()));
|
| m_contentView->AddObserver(this);
|
| }
|
|
|
|
|