Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4696)

Unified Diff: chrome/renderer/extensions/app_window_custom_bindings.cc

Issue 10896032: HTML titlebars for v2 apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..396e80f36c7d24561c7b9ba72455b81e3f881851 100644
--- a/chrome/renderer/extensions/app_window_custom_bindings.cc
+++ b/chrome/renderer/extensions/app_window_custom_bindings.cc
@@ -10,16 +10,17 @@
#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 "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLRequest.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"
@@ -28,9 +29,54 @@
namespace extensions {
+class DidCreateDocumentElementObserver : public content::RenderViewObserver {
+ public:
+ DidCreateDocumentElementObserver(
+ content::RenderView* view, Dispatcher* dispatcher, bool inject_titlebar)
+ : content::RenderViewObserver(view), dispatcher_(dispatcher),
+ inject_titlebar_(inject_titlebar) {
+ }
+ virtual void DidCreateDocumentElement(WebKit::WebFrame* frame) {
Mihai Parparita -not on Chrome 2012/08/30 01:13:47 Nit: OVERRIDE
jeremya 2012/08/30 02:21:02 Done.
+ 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::Local<v8::Value> inject_app_titlebar =
+ v8::Local<v8::Value>::New(
+ v8_context->module_system()->RequireForJsInner(
+ v8::String::New("injectAppTitlebar")));
+ if (inject_app_titlebar.IsEmpty())
+ return;
+ v8::Local<v8::Value> value =
+ v8::Local<v8::Object>::Cast(inject_app_titlebar)->Get(
abarth-chromium 2012/08/29 23:51:20 How do you know this case is legit? We should pro
jeremya 2012/08/30 02:21:02 Done.
+ v8::String::New("didCreateDocumentElement"));
+ DCHECK(!value.IsEmpty() && value->IsFunction());
abarth-chromium 2012/08/29 23:51:20 How do you know these conditions are met? These a
jeremya 2012/08/30 02:21:02 I believe the v8 extensions system is sufficient t
+ v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(value);
+ v8::Handle<v8::Value> argv[1];
+ argv[0] = v8::Boolean::New(inject_titlebar_);
+ frame->callFunctionEvenIfScriptDisabled(function,
+ v8::Object::New(),
+ arraysize(argv),
+ argv);
+ }
+
+ private:
+ Dispatcher* dispatcher_;
+ bool inject_titlebar_;
+};
+
AppWindowCustomBindings::AppWindowCustomBindings(Dispatcher* dispatcher)
: ChromeV8Extension(dispatcher) {
- RouteStaticFunction("GetView", &GetView);
+ RouteFunction("GetView",
+ base::Bind(&AppWindowCustomBindings::GetView,
+ base::Unretained(this)));
}
namespace {
@@ -60,14 +106,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 +133,8 @@ v8::Handle<v8::Value> AppWindowCustomBindings::GetView(
if (!view)
return v8::Undefined();
+ new DidCreateDocumentElementObserver(view, dispatcher(), inject_titlebar);
abarth-chromium 2012/08/29 23:51:20 I assume someone else manages the lifetime of this
jeremya 2012/08/30 02:21:02 See content/public/renderer/render_view_observer.h
+
// 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

Powered by Google App Engine
This is Rietveld 408576698