| <!doctype html> |
| <!-- |
| * Copyright 2017 The Chromium Authors. All rights reserved. Use of this |
| * source code is governed by a BSD-style license that can be found in the |
| * LICENSE file. |
| --> |
| <html> |
| <head> |
| <script type="text/javascript"> |
| // A guest that stores and deletes cookies. |
| // Note that the embedder has to initiate a postMessage first so that |
| // the guest has a reference to the embedder's window. |
| |
| // The window reference of the embedder to send post message reply. |
| var embedderWindowChannel = null; |
| |
| // A value that uniquely identifies the guest sending the messages to the |
| // embedder. |
| var channelId = 0; |
| var notifyEmbedder = function (msgArray) { |
| var msg = msgArray.concat([channelId]); |
| embedderWindowChannel.postMessage(JSON.stringify(msg), '*'); |
| }; |
| |
| var SPLIT_RE_ = /\s*;\s*/; |
| var setCookie = function(name, value) { // Just a random future time. |
| var futureDate = new Date((+new Date) + 10000 * 1000); |
| document.cookie = |
| name + '=' + value + ';expires=' + futureDate.toUTCString(); |
| }; |
| var setSessionCookie = function (name, value) { // Session cookie. |
| document.cookie = name + '=' + value; |
| }; |
| var getCookie = function (name) { |
| var nameEq = name + '='; |
| var parts = (document.cookie || '').split(SPLIT_RE_); |
| for (var i = 0; i < parts.length; ++i) { |
| var part = parts[i]; |
| if (part.startsWith(nameEq)) { |
| return part.substr(nameEq.length); |
| } |
| if (part == name) { |
| return ''; |
| } |
| } |
| return undefined; |
| }; |
| |
| var addCookies = function() { |
| window.console.log('setCookie: foo = fooValue'); |
| setCookie('foo', 'fooValue'); |
| window.console.log('setSessionCookie: bar = barValue'); |
| setSessionCookie('bar', 'barValue'); |
| notifyEmbedder(['step2.cookies-added']); |
| }; |
| |
| var onPostMessageReceived = function(e) { |
| embedderWindowChannel = e.source; |
| var data = JSON.parse(e.data); |
| if (data[0] == 'create-channel') { |
| window.console.log('guest: create-channel'); |
| channelId = data[1]; |
| notifyEmbedder(['channel-created']); |
| return; |
| } |
| |
| window.console.log('guest.onPostMessageReceived: ' + data[0]); |
| // Tests. |
| // These logs trigger event listeners in the embedder. |
| switch (data[0]) { |
| case 'step1.add-cookies': |
| window.console.log('guest.' + data[0]); |
| addCookies(); |
| break; |
| case 'step3.get-cookies': |
| window.console.log('guest.' + data[0]); |
| var retValues = ['step4.got-cookies']; |
| var cookieValues = []; |
| for (var i = 1; i < data.length; ++i) { |
| cookieValues.push(getCookie(data[i])); |
| } |
| retValues.push(cookieValues); |
| notifyEmbedder(retValues); |
| break; |
| default: |
| break; |
| } |
| }; |
| window.addEventListener('message', onPostMessageReceived, false); |
| </script> |
| </head> |
| <body> |
| <div>Guest that stores and retrieves certain cookies.</div> |
| </body> |
| </html> |