|  | // 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 "tonic/dart_class_library.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  | #include "tonic/dart_wrapper_info.h" | 
|  |  | 
|  | namespace tonic { | 
|  |  | 
|  | DartClassLibrary::DartClassLibrary() : provider_(nullptr) { | 
|  | } | 
|  |  | 
|  | DartClassLibrary::~DartClassLibrary() { | 
|  | // Note that we don't need to delete these persistent handles because this | 
|  | // object lives as long as the isolate. The handles will get deleted when the | 
|  | // isolate dies. | 
|  | } | 
|  |  | 
|  | Dart_PersistentHandle DartClassLibrary::GetClass(const DartWrapperInfo& info) { | 
|  | DCHECK(provider_); | 
|  |  | 
|  | const auto& result = cache_.insert(std::make_pair(&info, nullptr)); | 
|  | if (!result.second) { | 
|  | // Already present, return value. | 
|  | return result.first->second; | 
|  | } | 
|  | Dart_Handle class_handle = provider_->GetClassByName(info.interface_name); | 
|  | result.first->second = Dart_NewPersistentHandle(class_handle); | 
|  | return result.first->second; | 
|  | } | 
|  |  | 
|  | }  // namespace tonic |