blob: ac38e9ff0c0152ab40db7d077de2fded99297abe [file] [log] [blame]
// 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