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

Side by Side Diff: chrome/renderer/resources/extensions/web_view_internal_custom_bindings.js

Issue 541753004: Split web_view_internal_api and move part of it to extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing Created 6 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Custom binding for <webview> contextMenus API.
6 // Note that this file mimics custom bindings for chrome.contextMenus API
7 // which resides in context_menus_custom_bindings.js. The functions in this file
8 // have an extra instanceId parameter in the beginning, which corresponds to the
9 // id of the <webview>.
10 //
11 // TODO(lazyboy): Share common code /w context_menus_custom_bindings.js.
12
13 var EventBindings = require('event_bindings');
14 var binding = require('binding').Binding.create('webViewInternal');
15 var contextMenuNatives = requireNative('context_menus');
16 var sendRequest = require('sendRequest').sendRequest;
17
18 binding.registerCustomHook(function(bindingsAPI) {
19 var apiFunctions = bindingsAPI.apiFunctions;
20
21 var webviewContextMenus = {};
22 webviewContextMenus.generatedIdHandlers = {};
23 webviewContextMenus.stringIdHandlers = {};
24
25 // Per item event handler.
26 var ename = 'webViewInternal.contextMenus';
27 webviewContextMenus.event = new EventBindings.Event(ename);
28
29 webviewContextMenus.getIdFromCreateProperties = function(prop) {
30 if (typeof(prop.id) !== 'undefined')
31 return prop.id;
32 return prop.generatedId;
33 };
34
35 webviewContextMenus.handlersForId = function(instanceId, id) {
36 if (typeof(id) === 'number') {
37 if (!webviewContextMenus.generatedIdHandlers[instanceId]) {
38 webviewContextMenus.generatedIdHandlers[instanceId] = {};
39 }
40 return webviewContextMenus.generatedIdHandlers[instanceId];
41 }
42
43 if (!webviewContextMenus.stringIdHandlers[instanceId]) {
44 webviewContextMenus.stringIdHandlers[instanceId] = {};
45 }
46 return webviewContextMenus.stringIdHandlers[instanceId];
47 };
48
49 webviewContextMenus.ensureListenerSetup = function() {
50 if (webviewContextMenus.listening) {
51 return;
52 }
53 webviewContextMenus.listening = true;
54 webviewContextMenus.event.addListener(function() {
55 // An extension context menu item has been clicked on - fire the onclick
56 // if there is one.
57 var id = arguments[0].menuItemId;
58 var instanceId = arguments[0].webviewInstanceId;
59 delete arguments[0].webviewInstanceId;
60 var onclick = webviewContextMenus.handlersForId(instanceId, id)[id];
61 if (onclick) {
62 $Function.apply(onclick, null, arguments);
63 }
64 });
65 };
66
67 apiFunctions.setHandleRequest('contextMenusCreate', function() {
68 var args = arguments;
69 var id = contextMenuNatives.GetNextContextMenuId();
70 args[1].generatedId = id;
71
72 var optArgs = {
73 customCallback: this.customCallback,
74 };
75
76 sendRequest(this.name, args, this.definition.parameters, optArgs);
77 return webviewContextMenus.getIdFromCreateProperties(args[1]);
78 });
79
80 apiFunctions.setCustomCallback('contextMenusCreate',
81 function(name, request, response) {
82 if (chrome.runtime.lastError) {
83 return;
84 }
85
86 var instanceId = request.args[0];
87 var id = webviewContextMenus.getIdFromCreateProperties(request.args[1]);
88 var onclick = request.args.length ? request.args[1].onclick : null;
89 if (onclick) {
90 webviewContextMenus.ensureListenerSetup();
91 webviewContextMenus.handlersForId(instanceId, id)[id] = onclick;
92 }
93 });
94
95 apiFunctions.setCustomCallback('contextMenusUpdate',
96 function(name, request, response) {
97 if (chrome.runtime.lastError) {
98 return;
99 }
100 var instanceId = request.args[0];
101 var id = request.args[1];
102 if (request.args[2].onclick) {
103 webviewContextMenus.handlersForId(instanceId, id)[id] =
104 request.args[2].onclick;
105 }
106 });
107
108 apiFunctions.setCustomCallback('contextMenusRemove',
109 function(name, request, response) {
110 if (chrome.runtime.lastError) {
111 return;
112 }
113 var instanceId = request.args[0];
114 var id = request.args[1];
115 delete webviewContextMenus.handlersForId(instanceId, id)[id];
116 });
117
118 apiFunctions.setCustomCallback('contextMenusRemoveAll',
119 function(name, request, response) {
120 if (chrome.runtime.lastError) {
121 return;
122 }
123 var instanceId = request.args[0];
124 webviewContextMenus.stringIdHandlers[instanceId] = {};
125 webviewContextMenus.generatedIdHandlers[instanceId] = {};
126 });
127
128 });
129
130 exports.WebView = binding.generate();
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/web_view_experimental.js ('k') | chrome/renderer/resources/renderer_resources.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698