| Index: chrome/renderer/extensions/app_window_custom_bindings.cc
|
| diff --git a/chrome/renderer/extensions/app_window_custom_bindings.cc b/chrome/renderer/extensions/app_window_custom_bindings.cc
|
| index 5337e8dfb5190656ba9c9047ec52dd063c9b6ea0..de61374c83de0e10be4d53002d81c6467132a90a 100644
|
| --- a/chrome/renderer/extensions/app_window_custom_bindings.cc
|
| +++ b/chrome/renderer/extensions/app_window_custom_bindings.cc
|
| @@ -6,31 +6,50 @@
|
|
|
| #include <string>
|
|
|
| -#include "base/string_util.h"
|
| -#include "chrome/common/extensions/extension_action.h"
|
| #include "chrome/common/extensions/extension_messages.h"
|
| -#include "chrome/common/url_constants.h"
|
| +#include "chrome/renderer/extensions/chrome_v8_context.h"
|
| #include "chrome/renderer/extensions/dispatcher.h"
|
| -#include "chrome/renderer/extensions/extension_helper.h"
|
| #include "content/public/renderer/render_thread.h"
|
| #include "content/public/renderer/render_view.h"
|
| -#include "grit/renderer_resources.h"
|
| +#include "content/public/renderer/render_view_observer.h"
|
| +#include "content/public/renderer/render_view_visitor.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebNavigationPolicy.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebWindowFeatures.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLRequest.h"
|
| #include "v8/include/v8.h"
|
| -#include "webkit/glue/webkit_glue.h"
|
| -
|
| -#include "content/public/renderer/render_view.h"
|
| -#include "content/public/renderer/render_view_visitor.h"
|
|
|
| namespace extensions {
|
|
|
| +class DidCreateDocumentElementObserver : public content::RenderViewObserver {
|
| + public:
|
| + DidCreateDocumentElementObserver(
|
| + content::RenderView* view, Dispatcher* dispatcher)
|
| + : content::RenderViewObserver(view), dispatcher_(dispatcher) {
|
| + }
|
| +
|
| + virtual void DidCreateDocumentElement(WebKit::WebFrame* frame) OVERRIDE {
|
| + v8::HandleScope handle_scope;
|
| + DCHECK(frame);
|
| + DCHECK(dispatcher_);
|
| + ChromeV8Context* v8_context =
|
| + dispatcher_->v8_context_set().GetByV8Context(
|
| + frame->mainWorldScriptContext());
|
| +
|
| + if (!v8_context)
|
| + return;
|
| + v8::Context::Scope context_scope(v8_context->v8_context());
|
| + v8_context->module_system()->CallModuleMethod(
|
| + "injectAppTitlebar", "didCreateDocumentElement");
|
| + }
|
| +
|
| + private:
|
| + Dispatcher* dispatcher_;
|
| +};
|
| +
|
| AppWindowCustomBindings::AppWindowCustomBindings(Dispatcher* dispatcher)
|
| : ChromeV8Extension(dispatcher) {
|
| - RouteStaticFunction("GetView", &GetView);
|
| + RouteFunction("GetView",
|
| + base::Bind(&AppWindowCustomBindings::GetView,
|
| + base::Unretained(this)));
|
| }
|
|
|
| namespace {
|
| @@ -60,14 +79,19 @@ v8::Handle<v8::Value> AppWindowCustomBindings::GetView(
|
| const v8::Arguments& args) {
|
| // TODO(jeremya): convert this to IDL nocompile to get validation, and turn
|
| // these argument checks into CHECK().
|
| - if (args.Length() != 1)
|
| + if (args.Length() != 2)
|
| return v8::Undefined();
|
|
|
| if (!args[0]->IsInt32())
|
| return v8::Undefined();
|
|
|
| + if (!args[1]->IsBoolean())
|
| + return v8::Undefined();
|
| +
|
| int view_id = args[0]->Int32Value();
|
|
|
| + bool inject_titlebar = args[1]->BooleanValue();
|
| +
|
| if (view_id == MSG_ROUTING_NONE)
|
| return v8::Undefined();
|
|
|
| @@ -82,6 +106,9 @@ v8::Handle<v8::Value> AppWindowCustomBindings::GetView(
|
| if (!view)
|
| return v8::Undefined();
|
|
|
| + if (inject_titlebar)
|
| + new DidCreateDocumentElementObserver(view, dispatcher());
|
| +
|
| // TODO(jeremya): it doesn't really make sense to set the opener here, but we
|
| // need to make sure the security origin is set up before returning the DOM
|
| // reference. A better way to do this would be to have the browser pass the
|
|
|