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)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "gin/per_context_data.h"
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/logging.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "gin/public/context_holder.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "gin/public/wrapper_info.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gin {
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PerContextData::PerContextData(ContextHolder* context_holder,
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                               v8::Handle<v8::Context> context)
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : context_holder_(context_holder),
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      runner_(NULL) {
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  context->SetAlignedPointerInEmbedderData(
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      kPerContextDataStartIndex + kEmbedderNativeGin, this);
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PerContextData::~PerContextData() {
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  v8::HandleScope handle_scope(context_holder_->isolate());
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  context_holder_->context()->SetAlignedPointerInEmbedderData(
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      kPerContextDataStartIndex + kEmbedderNativeGin, NULL);
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)PerContextData* PerContextData::From(v8::Handle<v8::Context> context) {
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return static_cast<PerContextData*>(
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      context->GetAlignedPointerFromEmbedderData(kEncodedValueIndex));
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace gin
34