| // 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 "flutter/lib/ui/ui_dart_state.h" |
| |
| #include "flutter/lib/ui/window/window.h" |
| #include "flutter/sky/engine/platform/fonts/FontSelector.h" |
| #include "lib/tonic/converter/dart_converter.h" |
| |
| using tonic::ToDart; |
| |
| namespace blink { |
| |
| IsolateClient::~IsolateClient() {} |
| |
| UIDartState::UIDartState(IsolateClient* isolate_client, |
| std::unique_ptr<Window> window) |
| : isolate_client_(isolate_client), |
| main_port_(ILLEGAL_PORT), |
| window_(std::move(window)) {} |
| |
| UIDartState::~UIDartState() { |
| main_port_ = ILLEGAL_PORT; |
| // We've already destroyed the isolate. Revoke any weak ptrs held by |
| // DartPersistentValues so they don't try to enter the destroyed isolate to |
| // clean themselves up. |
| // TODO(abarth): Can we do this work in the base class? |
| weak_factory_.InvalidateWeakPtrs(); |
| } |
| |
| UIDartState* UIDartState::CreateForChildIsolate() { |
| return new UIDartState(isolate_client_, nullptr); |
| } |
| |
| void UIDartState::DidSetIsolate() { |
| FXL_DCHECK(!debug_name_prefix_.empty()); |
| main_port_ = Dart_GetMainPortId(); |
| std::ostringstream debug_name; |
| debug_name << debug_name_prefix_ << "$main-" << main_port_; |
| debug_name_ = debug_name.str(); |
| } |
| |
| UIDartState* UIDartState::Current() { |
| return static_cast<UIDartState*>(DartState::Current()); |
| } |
| |
| void UIDartState::set_font_selector(PassRefPtr<FontSelector> selector) { |
| font_selector_ = selector; |
| } |
| |
| |
| PassRefPtr<FontSelector> UIDartState::font_selector() { |
| return font_selector_; |
| } |
| |
| void UIDartState::set_debug_name_prefix(const std::string& debug_name_prefix) { |
| debug_name_prefix_ = debug_name_prefix; |
| } |
| |
| } // namespace blink |