// Copyright (c) 2014 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. 'use strict'; /** * @fileoverview This is the content script injected by the opt in helper. * It is injected into the newtab page and also google.com and notifies the * page to show an opt-in message for the user to enable the built-in hotword * extension. */ /** @constructor */ var OptInClient = function() {}; /** * Commands sent from this injected content scripts to the page. * @enum {string} */ OptInClient.CommandToPage = { // Allow hotword opt-in message bubble to be displayed. ALLOW_OPTIN_MESSAGE: 'chwom' }; /** * Commands sent from the page to this content script. * @enum {string} */ OptInClient.CommandFromPage = { // User has explicitly clicked 'no'. CLICKED_NO_OPTIN: 'hcno', // User has opted in. CLICKED_OPTIN: 'hco', // Audio logging is opted in. AUDIO_LOGGING_ON: 'alon', // Audio logging is opted out. AUDIO_LOGGING_OFF: 'aloff', }; /** * Used to determine if this content script has already been injected. * @const {string} * @private */ OptInClient.EXISTS_ = 'chwoihe'; /** * Handles the messages posted to the window, mainly listening for * the optin and no optin clicks. Also listening for preference on * audio logging. * @param {!MessageEvent} messageEvent Message event from the window. * @private */ OptInClient.prototype.handleCommandFromPage_ = function(messageEvent) { if (messageEvent.source === window && messageEvent.data.type) { var command = messageEvent.data.type; chrome.runtime.sendMessage({'type': command}); } }; /** * Sends a command to the page allowing it to display the hotword opt-in * message. It is up to the page whether it is actually displayed. * @private */ OptInClient.prototype.notifyPageAllowOptIn_ = function() { if (document.readyState === 'complete') { window.postMessage( {'type': OptInClient.CommandToPage.ALLOW_OPTIN_MESSAGE}, '*'); } }; /** * Initializes the content script. */ OptInClient.prototype.initialize = function() { if (OptInClient.EXISTS_ in window) return; window[OptInClient.EXISTS_] = true; window.addEventListener( 'message', this.handleCommandFromPage_.bind(this), false); if (document.readyState === 'complete') this.notifyPageAllowOptIn_(); else document.onreadystatechange = this.notifyPageAllowOptIn_; }; new OptInClient().initialize();