Revved to chromium 290d2cfa5187ac1f2c87fde4c6dd6f27dad0c93a refs/remotes/origin/HEAD
diff --git a/gin/per_context_data.h b/gin/per_context_data.h
new file mode 100644
index 0000000..0d11653
--- /dev/null
+++ b/gin/per_context_data.h
@@ -0,0 +1,48 @@
+// 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.
+
+#ifndef GIN_PER_CONTEXT_DATA_H_
+#define GIN_PER_CONTEXT_DATA_H_
+
+#include "base/basictypes.h"
+#include "base/supports_user_data.h"
+#include "gin/gin_export.h"
+#include "v8/include/v8.h"
+
+namespace gin {
+
+class ContextHolder;
+class Runner;
+
+// There is one instance of PerContextData per v8::Context managed by Gin. This
+// class stores all the Gin-related data that varies per context. Arbitrary data
+// can be associated with this class by way of the SupportsUserData methods.
+// Instances of this class (and any associated user data) are destroyed before
+// the associated v8::Context.
+class GIN_EXPORT PerContextData : public base::SupportsUserData {
+ public:
+  PerContextData(ContextHolder* context_holder,
+                 v8::Handle<v8::Context> context);
+  virtual ~PerContextData();
+
+  // Can return NULL after the ContextHolder has detached from context.
+  static PerContextData* From(v8::Handle<v8::Context> context);
+
+  // The Runner associated with this context. To execute script in this context,
+  // please use the appropriate API on Runner.
+  Runner* runner() const { return runner_; }
+  void set_runner(Runner* runner) { runner_ = runner; }
+
+  ContextHolder* context_holder() { return context_holder_; }
+
+ private:
+  ContextHolder* context_holder_;
+  Runner* runner_;
+
+  DISALLOW_COPY_AND_ASSIGN(PerContextData);
+};
+
+}  // namespace gin
+
+#endif  // GIN_PER_CONTEXT_DATA_H_