Index: components/html_viewer/html_document_application_delegate.cc |
diff --git a/components/html_viewer/html_document_application_delegate.cc b/components/html_viewer/html_document_application_delegate.cc |
deleted file mode 100644 |
index e1208d2c85799a8f615e6f42a6539a83d67c2354..0000000000000000000000000000000000000000 |
--- a/components/html_viewer/html_document_application_delegate.cc |
+++ /dev/null |
@@ -1,186 +0,0 @@ |
-// 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/html_document_application_delegate.h" |
- |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/macros.h" |
-#include "components/html_viewer/global_state.h" |
-#include "components/html_viewer/html_document.h" |
-#include "mojo/shell/public/cpp/shell_client.h" |
- |
-namespace html_viewer { |
- |
-// ServiceConnectorQueue records all incoming service requests and processes |
-// them once PushRequestsTo() is called. This is useful if you need to delay |
-// processing incoming service requests. |
-class HTMLDocumentApplicationDelegate::ServiceConnectorQueue |
- : public mojo::ServiceConnector { |
- public: |
- ServiceConnectorQueue() {} |
- ~ServiceConnectorQueue() override {} |
- |
- void PushRequestsTo(mojo::Connection* connection) { |
- ScopedVector<Request> requests; |
- requests_.swap(requests); |
- for (Request* request : requests) { |
- connection->GetLocalServiceProvider()->ConnectToService( |
- request->interface_name, std::move(request->handle)); |
- } |
- } |
- |
- private: |
- struct Request { |
- std::string interface_name; |
- mojo::ScopedMessagePipeHandle handle; |
- }; |
- |
- // mojo::ServiceConnector: |
- void ConnectToService(mojo::Connection* connection, |
- const std::string& interface_name, |
- mojo::ScopedMessagePipeHandle handle) override { |
- scoped_ptr<Request> request(new Request); |
- request->interface_name = interface_name; |
- request->handle = std::move(handle); |
- requests_.push_back(std::move(request)); |
- } |
- |
- ScopedVector<Request> requests_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ServiceConnectorQueue); |
-}; |
- |
-HTMLDocumentApplicationDelegate::HTMLDocumentApplicationDelegate( |
- mojo::ApplicationRequest request, |
- mojo::URLResponsePtr response, |
- GlobalState* global_state, |
- scoped_ptr<mojo::AppRefCount> parent_app_refcount, |
- const mojo::Callback<void()>& destruct_callback) |
- : app_(this, |
- std::move(request), |
- base::Bind(&HTMLDocumentApplicationDelegate::OnTerminate, |
- base::Unretained(this))), |
- parent_app_refcount_(std::move(parent_app_refcount)), |
- url_(response->url), |
- initial_response_(std::move(response)), |
- global_state_(global_state), |
- html_factory_(this), |
- destruct_callback_(destruct_callback), |
- weak_factory_(this) {} |
- |
-HTMLDocumentApplicationDelegate::~HTMLDocumentApplicationDelegate() { |
- // Deleting the documents is going to trigger a callback to |
- // OnHTMLDocumentDeleted() and remove from |documents_|. Copy the set so we |
- // don't have to worry about the set being modified out from under us. |
- std::set<HTMLDocument*> documents2(documents2_); |
- for (HTMLDocument* doc : documents2) |
- doc->Destroy(); |
- DCHECK(documents2_.empty()); |
- destruct_callback_.Run(); |
-} |
- |
-// Callback from the quit closure. We key off this rather than |
-// mojo::ShellClient::Quit() as we don't want to shut down the messageloop |
-// when we quit (the messageloop is shared among multiple |
-// HTMLDocumentApplicationDelegates). |
-void HTMLDocumentApplicationDelegate::OnTerminate() { |
- delete this; |
-} |
- |
-// mojo::ShellClient; |
-void HTMLDocumentApplicationDelegate::Initialize(mojo::Shell* shell, |
- const std::string& url, |
- uint32_t id) { |
- app_.ConnectToService("mojo:network_service", &url_loader_factory_); |
-} |
- |
-bool HTMLDocumentApplicationDelegate::AcceptConnection( |
- mojo::Connection* connection) { |
- if (initial_response_) { |
- OnResponseReceived(nullptr, mojo::URLLoaderPtr(), connection, nullptr, |
- std::move(initial_response_)); |
- } else if (url_ == "about:blank") { |
- // This is a little unfortunate. At the browser side, when starting a new |
- // app for "about:blank", the application manager uses |
- // mojo::shell::AboutFetcher to construct a response for "about:blank". |
- // However, when an app for "about:blank" already exists, it is reused and |
- // we end up here. We cannot fetch the URL using mojo::URLLoader because it |
- // is not an actual Web resource. |
- // TODO(yzshen): find out a better approach. |
- mojo::URLResponsePtr response(mojo::URLResponse::New()); |
- response->url = url_; |
- response->status_code = 200; |
- response->mime_type = "text/html"; |
- OnResponseReceived(nullptr, mojo::URLLoaderPtr(), connection, nullptr, |
- std::move(response)); |
- } else { |
- // HTMLDocument provides services, but is created asynchronously. Queue up |
- // requests until the HTMLDocument is created. |
- scoped_ptr<ServiceConnectorQueue> service_connector_queue( |
- new ServiceConnectorQueue); |
- connection->SetServiceConnector(service_connector_queue.get()); |
- |
- mojo::URLLoaderPtr loader; |
- url_loader_factory_->CreateURLLoader(GetProxy(&loader)); |
- mojo::URLRequestPtr request(mojo::URLRequest::New()); |
- request->url = url_; |
- request->auto_follow_redirects = true; |
- |
- // |loader| will be passed to the OnResponseReceived method through a |
- // callback. Because order of evaluation is undefined, a reference to the |
- // raw pointer is needed. |
- mojo::URLLoader* raw_loader = loader.get(); |
- // The app needs to stay alive while waiting for the response to be |
- // available. |
- scoped_ptr<mojo::AppRefCount> app_retainer(app_.CreateAppRefCount()); |
- raw_loader->Start( |
- std::move(request), |
- base::Bind(&HTMLDocumentApplicationDelegate::OnResponseReceived, |
- weak_factory_.GetWeakPtr(), base::Passed(&app_retainer), |
- base::Passed(&loader), connection, |
- base::Passed(&service_connector_queue))); |
- } |
- return true; |
-} |
- |
-void HTMLDocumentApplicationDelegate::OnHTMLDocumentDeleted2( |
- HTMLDocument* document) { |
- DCHECK(documents2_.count(document) > 0); |
- documents2_.erase(document); |
-} |
- |
-void HTMLDocumentApplicationDelegate::OnResponseReceived( |
- scoped_ptr<mojo::AppRefCount> app_refcount, |
- mojo::URLLoaderPtr loader, |
- mojo::Connection* connection, |
- scoped_ptr<ServiceConnectorQueue> connector_queue, |
- mojo::URLResponsePtr response) { |
- // HTMLDocument is destroyed when the hosting view is destroyed, or |
- // explicitly from our destructor. |
- HTMLDocument* document = new HTMLDocument( |
- &app_, connection, std::move(response), global_state_, |
- base::Bind(&HTMLDocumentApplicationDelegate::OnHTMLDocumentDeleted2, |
- base::Unretained(this)), |
- html_factory_); |
- documents2_.insert(document); |
- |
- if (connector_queue) { |
- connector_queue->PushRequestsTo(connection); |
- connection->SetServiceConnector(nullptr); |
- } |
-} |
- |
-HTMLFrame* HTMLDocumentApplicationDelegate::CreateHTMLFrame( |
- HTMLFrame::CreateParams* params) { |
- return new HTMLFrame(params); |
-} |
- |
-HTMLWidgetRootLocal* HTMLDocumentApplicationDelegate::CreateHTMLWidgetRootLocal( |
- HTMLWidgetRootLocal::CreateParams* params) { |
- return new HTMLWidgetRootLocal(params); |
-} |
- |
-} // namespace html_viewer |