1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "gin/public/context_holder.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/logging.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "gin/per_context_data.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gin {
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ContextHolder::ContextHolder(v8::Isolate* isolate)
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : isolate_(isolate) {
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ContextHolder::~ContextHolder() {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  v8::HandleScope handle_scope(isolate());
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  v8::Handle<v8::Context> context = this->context();
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  data_->Detach(context);
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  data_.reset();
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO(abarth): Figure out how to set kResetInDestructor to true.
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  context_.Reset();
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ContextHolder::SetContext(v8::Handle<v8::Context> context) {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(context_.IsEmpty());
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  context_.Reset(isolate_, context);
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  data_.reset(new PerContextData(context));
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace gin
34