| // Copyright 2015 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 "components/html_viewer/layout_test_content_handler_impl.h" | 
 |  | 
 | #include "base/bind.h" | 
 | #include "components/html_viewer/html_document_application_delegate.h" | 
 | #include "components/html_viewer/html_widget.h" | 
 | #include "components/html_viewer/web_test_delegate_impl.h" | 
 | #include "components/test_runner/web_frame_test_proxy.h" | 
 | #include "third_party/WebKit/public/web/WebTestingSupport.h" | 
 | #include "third_party/WebKit/public/web/WebView.h" | 
 |  | 
 | namespace html_viewer { | 
 |  | 
 | class TestHTMLFrame : public HTMLFrame { | 
 |  public: | 
 |   explicit TestHTMLFrame(HTMLFrame::CreateParams* params) : HTMLFrame(params) {} | 
 |  | 
 |  protected: | 
 |   ~TestHTMLFrame() override {} | 
 |  | 
 |  private: | 
 |   // blink::WebFrameClient:: | 
 |   void didClearWindowObject(blink::WebLocalFrame* frame) override { | 
 |     HTMLFrame::didClearWindowObject(frame); | 
 |     blink::WebTestingSupport::injectInternalsObject(frame); | 
 |   } | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(TestHTMLFrame); | 
 | }; | 
 |  | 
 | LayoutTestContentHandlerImpl::LayoutTestContentHandlerImpl( | 
 |     GlobalState* global_state, | 
 |     mojo::ApplicationImpl* app, | 
 |     mojo::InterfaceRequest<mojo::ContentHandler> request, | 
 |     test_runner::WebTestInterfaces* test_interfaces, | 
 |     WebTestDelegateImpl* test_delegate) | 
 |     : ContentHandlerImpl(global_state, app, request.Pass()), | 
 |       test_interfaces_(test_interfaces), | 
 |       test_delegate_(test_delegate), | 
 |       web_widget_proxy_(nullptr) {} | 
 |  | 
 | LayoutTestContentHandlerImpl::~LayoutTestContentHandlerImpl() { | 
 | } | 
 |  | 
 | void LayoutTestContentHandlerImpl::StartApplication( | 
 |     mojo::InterfaceRequest<mojo::Application> request, | 
 |     mojo::URLResponsePtr response) { | 
 |   test_interfaces_->SetTestIsRunning(true); | 
 |   test_interfaces_->ConfigureForTestWithURL(GURL(), false); | 
 |  | 
 |   // HTMLDocumentApplicationDelegate deletes itself. | 
 |   HTMLDocumentApplicationDelegate* delegate = | 
 |       new HTMLDocumentApplicationDelegate( | 
 |           request.Pass(), response.Pass(), global_state(), | 
 |           app()->app_lifetime_helper()->CreateAppRefCount()); | 
 |  | 
 |   delegate->set_html_factory(this); | 
 | } | 
 |  | 
 | HTMLWidgetRootLocal* LayoutTestContentHandlerImpl::CreateHTMLWidgetRootLocal( | 
 |     HTMLWidgetRootLocal::CreateParams* params) { | 
 |   web_widget_proxy_ = new WebWidgetProxy(params); | 
 |   return web_widget_proxy_; | 
 | } | 
 |  | 
 | HTMLFrame* LayoutTestContentHandlerImpl::CreateHTMLFrame( | 
 |     HTMLFrame::CreateParams* params) { | 
 |   // The test harness isn't correctly set-up for iframes yet. So return a normal | 
 |   // HTMLFrame for iframes. | 
 |   if (params->parent || !params->view || params->view->id() != params->id) | 
 |     return new HTMLFrame(params); | 
 |  | 
 |   using ProxyType = | 
 |       test_runner::WebFrameTestProxy<TestHTMLFrame, HTMLFrame::CreateParams*>; | 
 |   ProxyType* proxy = new ProxyType(params); | 
 |  | 
 |   web_widget_proxy_->SetInterfaces(test_interfaces_); | 
 |   web_widget_proxy_->SetDelegate(test_delegate_); | 
 |   proxy->set_base_proxy(web_widget_proxy_); | 
 |   test_delegate_->set_test_proxy(web_widget_proxy_); | 
 |   test_interfaces_->SetWebView(web_widget_proxy_->web_view(), | 
 |                                web_widget_proxy_); | 
 |   web_widget_proxy_->set_widget(web_widget_proxy_->web_view()); | 
 |   test_interfaces_->BindTo(web_widget_proxy_->web_view()->mainFrame()); | 
 |   return proxy; | 
 | } | 
 |  | 
 | }  // namespace html_viewer |