blob: 5dc1d29c3497e15e6c4b2942ab5b928d92f80946 [file] [log] [blame]
John McCutchan080c33e2015-07-16 12:35:35 -07001// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "tonic/dart_class_library.h"
6
7#include "base/logging.h"
8#include "tonic/dart_wrapper_info.h"
9
John McCutchandeace8f2015-07-21 08:01:40 -070010namespace tonic {
John McCutchan080c33e2015-07-16 12:35:35 -070011
12DartClassLibrary::DartClassLibrary() : provider_(nullptr) {
13}
14
15DartClassLibrary::~DartClassLibrary() {
16 // Note that we don't need to delete these persistent handles because this
17 // object lives as long as the isolate. The handles will get deleted when the
18 // isolate dies.
19}
20
21Dart_PersistentHandle DartClassLibrary::GetClass(const DartWrapperInfo& info) {
22 DCHECK(provider_);
23
24 const auto& result = cache_.insert(std::make_pair(&info, nullptr));
25 if (!result.second) {
26 // Already present, return value.
27 return result.first->second;
28 }
29 Dart_Handle class_handle = provider_->GetClassByName(info.interface_name);
30 result.first->second = Dart_NewPersistentHandle(class_handle);
31 return result.first->second;
32}
33
John McCutchandeace8f2015-07-21 08:01:40 -070034} // namespace tonic