Revved to chromium 290d2cfa5187ac1f2c87fde4c6dd6f27dad0c93a refs/remotes/origin/HEAD
diff --git a/gin/per_context_data.cc b/gin/per_context_data.cc
new file mode 100644
index 0000000..178c0d1
--- /dev/null
+++ b/gin/per_context_data.cc
@@ -0,0 +1,33 @@
+// Copyright 2013 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 "gin/per_context_data.h"
+
+#include "base/logging.h"
+#include "gin/public/context_holder.h"
+#include "gin/public/wrapper_info.h"
+
+namespace gin {
+
+PerContextData::PerContextData(ContextHolder* context_holder,
+                               v8::Handle<v8::Context> context)
+    : context_holder_(context_holder),
+      runner_(NULL) {
+  context->SetAlignedPointerInEmbedderData(
+      kPerContextDataStartIndex + kEmbedderNativeGin, this);
+}
+
+PerContextData::~PerContextData() {
+  v8::HandleScope handle_scope(context_holder_->isolate());
+  context_holder_->context()->SetAlignedPointerInEmbedderData(
+      kPerContextDataStartIndex + kEmbedderNativeGin, NULL);
+}
+
+// static
+PerContextData* PerContextData::From(v8::Handle<v8::Context> context) {
+  return static_cast<PerContextData*>(
+      context->GetAlignedPointerFromEmbedderData(kEncodedValueIndex));
+}
+
+}  // namespace gin