aboutsummaryrefslogtreecommitdiffstats
path: root/pages
diff options
context:
space:
mode:
authorStephen Blott2014-12-29 17:28:37 +0000
committerStephen Blott2014-12-29 17:28:37 +0000
commitf7541ed966859ae893600f5cfd17a1965efd0822 (patch)
tree386ac078c3d08c2dba9c6b0a11b49cf0063ed382 /pages
parent6c1bbf0ab5781951364464c5fa68ad22f74c9fee (diff)
parent7499675455941251eaa69c93e7c66bfb1c6ae35c (diff)
downloadvimium-f7541ed966859ae893600f5cfd17a1965efd0822.tar.bz2
Merge branch 'smblott-uicomponent-iframe' into post-1.46-with-uicomponent-iframe
Conflicts: content_scripts/vimium_frontend.coffee manifest.json
Diffstat (limited to 'pages')
-rw-r--r--pages/test_ui_component.coffee8
-rw-r--r--pages/test_ui_component.html11
-rw-r--r--pages/ui_component_server.coffee27
3 files changed, 46 insertions, 0 deletions
diff --git a/pages/test_ui_component.coffee b/pages/test_ui_component.coffee
new file mode 100644
index 00000000..e140fb14
--- /dev/null
+++ b/pages/test_ui_component.coffee
@@ -0,0 +1,8 @@
+UIComponentServer.registerHandler (event) ->
+ document.body.innerHTML = event.data
+
+window.addEventListener "keydown", (event) ->
+ if KeyboardUtils.isEscape event
+ UIComponentServer.postMessage "hide"
+ else
+ UIComponentServer.postMessage event.keyCode
diff --git a/pages/test_ui_component.html b/pages/test_ui_component.html
new file mode 100644
index 00000000..06af346c
--- /dev/null
+++ b/pages/test_ui_component.html
@@ -0,0 +1,11 @@
+<html>
+ <head>
+ <title>Test</title>
+ <script type="text/javascript" src="../lib/keyboard_utils.js"></script>
+ <script type="text/javascript" src="ui_component_server.js"></script>
+ <script type="text/javascript" src="test_ui_component.js"></script>
+ <link rel="stylesheet" type="text/css" href="../content_scripts/vimium.css" />
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/pages/ui_component_server.coffee b/pages/ui_component_server.coffee
new file mode 100644
index 00000000..8b43095b
--- /dev/null
+++ b/pages/ui_component_server.coffee
@@ -0,0 +1,27 @@
+
+# Fetch the Vimium secret, register the port recieved from the parent window, and stop listening for messages
+# on the window object. vimiumSecret is accessible only within the current instantion of Vimium. So a
+# malicious host page trying to register its own port can do no better than guessing.
+registerPort = (event) ->
+ chrome.storage.local.get "vimiumSecret", ({vimiumSecret: secret}) ->
+ return unless event.source == window.parent and event.data == secret
+ UIComponentServer.portOpen event.ports[0]
+ window.removeEventListener "message", registerPort
+
+window.addEventListener "message", registerPort
+
+UIComponentServer =
+ ownerPagePort: null
+ handleMessage: null
+
+ portOpen: (@ownerPagePort) ->
+ @ownerPagePort.onmessage = (event) =>
+ @handleMessage event if @handleMessage
+
+ registerHandler: (@handleMessage) ->
+
+ postMessage: (message) ->
+ @ownerPagePort.postMessage message if @ownerPagePort
+
+root = exports ? window
+root.UIComponentServer = UIComponentServer