1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // Copyright 2020 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 "fuchsia_web/runners/cast/named_message_port_connector_fuchsia.h"
- #include <fuchsia/mem/cpp/fidl.h>
- #include <fuchsia/web/cpp/fidl.h>
- #include <memory>
- #include <string>
- #include <utility>
- #include <vector>
- #include "base/files/file_util.h"
- #include "base/fuchsia/mem_buffer_util.h"
- #include "base/logging.h"
- #include "base/path_service.h"
- #include "components/cast/named_message_port_connector/grit/named_message_port_connector_resources.h"
- namespace {
- constexpr uint64_t kPortConnectorBindingsId = 1000;
- } // namespace
- NamedMessagePortConnectorFuchsia::NamedMessagePortConnectorFuchsia(
- fuchsia::web::Frame* frame)
- : frame_(frame) {
- DCHECK(frame_);
- base::FilePath port_connector_js_path;
- CHECK(base::PathService::Get(base::DIR_ASSETS, &port_connector_js_path));
- port_connector_js_path = port_connector_js_path.AppendASCII(
- "components/cast/named_message_port_connector/"
- "named_message_port_connector.js");
- std::string bindings_script_string;
- CHECK(
- base::ReadFileToString(port_connector_js_path, &bindings_script_string));
- DCHECK(!bindings_script_string.empty())
- << "NamedMessagePortConnector resources not loaded.";
- // Inject the JS connection API into the Frame.
- constexpr char kBindingsScriptVmoName[] = "port-connector-js";
- fuchsia::mem::Buffer bindings_script = base::MemBufferFromString(
- std::move(bindings_script_string), kBindingsScriptVmoName);
- std::vector<std::string> origins = {"*"};
- frame_->AddBeforeLoadJavaScript(
- kPortConnectorBindingsId, std::move(origins), std::move(bindings_script),
- [](fuchsia::web::Frame_AddBeforeLoadJavaScript_Result result) {
- CHECK(result.is_response())
- << "Couldn't inject port connector bindings.";
- });
- }
- NamedMessagePortConnectorFuchsia::~NamedMessagePortConnectorFuchsia() {
- // Nothing to do if there is no attached Frame.
- if (!frame_)
- return;
- frame_->RemoveBeforeLoadJavaScript(kPortConnectorBindingsId);
- }
- void NamedMessagePortConnectorFuchsia::DetachFromFrame() {
- frame_ = nullptr;
- }
|