Skip to content

Commit f0d71dc

Browse files
committed
support policy.setNewWindowManifest in 'new-win-policy'
Fix nwjs#2543
1 parent 0d9a031 commit f0d71dc

File tree

7 files changed

+30
-7
lines changed

7 files changed

+30
-7
lines changed

src/api/dispatcher.cc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ void Dispatcher::willHandleNavigationPolicy(
205205
content::RenderView* rv,
206206
blink::WebFrame* frame,
207207
const blink::WebURLRequest& request,
208-
blink::WebNavigationPolicy* policy) {
208+
blink::WebNavigationPolicy* policy,
209+
blink::WebString* manifest) {
209210

210211
blink::WebView* web_view = rv->GetWebView();
211212

@@ -246,6 +247,15 @@ void Dispatcher::willHandleNavigationPolicy(
246247
v8::Handle<v8::Value> argv[] = {id_val, v8_str("new-win-policy"), args };
247248

248249
node::MakeCallback(isolate, objects_registry, "handleEvent", 3, argv);
250+
v8::Local<v8::Value> manifest_val = policy_obj->Get(v8_str("manifest"));
251+
252+
//TODO: change this to object
253+
if (manifest_val->IsString()) {
254+
v8::String::Utf8Value manifest_str(manifest_val);
255+
if (manifest)
256+
*manifest = blink::WebString::fromUTF8(*manifest_str);
257+
}
258+
249259
v8::Local<v8::Value> val = policy_obj->Get(v8_str("val"));
250260
if (!val->IsString())
251261
return;

src/api/dispatcher.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ class Dispatcher : public content::RenderViewObserver {
5454
content::RenderView* rv,
5555
blink::WebFrame* frame,
5656
const blink::WebURLRequest& request,
57-
blink::WebNavigationPolicy* policy);
57+
blink::WebNavigationPolicy* policy,
58+
blink::WebString* manifest);
5859

5960
private:
6061
// RenderViewObserver implementation.

src/api/window_bindings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ Window.prototype.handleEvent = function(ev) {
146146
policy.forceDownload = function () { this.val = 'download'; };
147147
policy.forceNewWindow = function () { this.val = 'new-window'; };
148148
policy.forceNewPopup = function () { this.val = 'new-popup'; };
149+
policy.setNewWindowManifest = function (m) { this.manifest = JSON.stringify(m); };
149150
}
150151
// Route events to EventEmitter.
151152
this.emit.apply(this, arguments);

src/nw_shell.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "content/nw/src/nw_shell.h"
2222

2323
#include "base/command_line.h"
24+
#include "base/json/json_reader.h"
2425
#include "base/message_loop/message_loop.h"
2526
#include "base/strings/string_util.h"
2627
#include "base/strings/utf_string_conversions.h"
@@ -568,11 +569,18 @@ void Shell::WebContentsCreated(WebContents* source_contents,
568569
int source_frame_id,
569570
const base::string16& frame_name,
570571
const GURL& target_url,
571-
WebContents* new_contents) {
572+
WebContents* new_contents,
573+
const base::string16& nw_window_manifest) {
572574
// Create with package's manifest
573575
scoped_ptr<base::DictionaryValue> manifest(
574576
GetPackage()->window()->DeepCopy());
575577

578+
scoped_ptr<base::Value> val;
579+
std::string manifest_str = base::UTF16ToUTF8(nw_window_manifest);
580+
val.reset(base::JSONReader().ReadToValue(manifest_str));
581+
if (val.get() && val->IsType(base::Value::TYPE_DICTIONARY))
582+
manifest.reset(static_cast<base::DictionaryValue*>(val.release()));
583+
576584
// Get window features
577585
blink::WebWindowFeatures features = new_contents->GetWindowFeatures();
578586
manifest->SetBoolean(switches::kmResizable, features.resizable);

src/nw_shell.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ class Shell : public WebContentsDelegate,
165165
int source_frame_id,
166166
const base::string16& frame_name,
167167
const GURL& target_url,
168-
WebContents* new_contents) OVERRIDE;
168+
WebContents* new_contents,
169+
const base::string16& nw_window_manifest) OVERRIDE;
169170
virtual void ToggleFullscreenModeForTab(WebContents* web_contents,
170171
bool enter_fullscreen) OVERRIDE;
171172
virtual bool IsFullscreenForTabOrPending(

src/renderer/shell_content_renderer_client.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,9 +502,10 @@ void ShellContentRendererClient::willHandleNavigationPolicy(
502502
RenderView* rv,
503503
blink::WebFrame* frame,
504504
const blink::WebURLRequest& request,
505-
blink::WebNavigationPolicy* policy) {
505+
blink::WebNavigationPolicy* policy,
506+
blink::WebString* manifest) {
506507

507-
nwapi::Dispatcher::willHandleNavigationPolicy(rv, frame, request, policy);
508+
nwapi::Dispatcher::willHandleNavigationPolicy(rv, frame, request, policy, manifest);
508509
}
509510

510511
void ShellContentRendererClient::windowOpenBegin(const blink::WebURL& url) {

src/renderer/shell_content_renderer_client.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ class ShellContentRendererClient : public ContentRendererClient {
5454
virtual void willHandleNavigationPolicy(RenderView* rv,
5555
blink::WebFrame* frame,
5656
const blink::WebURLRequest& request,
57-
blink::WebNavigationPolicy* policy) OVERRIDE;
57+
blink::WebNavigationPolicy* policy,
58+
blink::WebString* manifest = NULL) OVERRIDE;
5859

5960
virtual void windowOpenBegin(const blink::WebURL& url) OVERRIDE;
6061
virtual void windowOpenEnd() OVERRIDE;

0 commit comments

Comments
 (0)