12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)var chrome;
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)if (!chrome)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome = {};
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)if (!chrome.embeddedSearch) {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome.embeddedSearch = new function() {
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    this.searchBox = new function() {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      //                            Private functions
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      native function Focus();
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      native function GetDisplayInstantResults();
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function GetMostVisitedItemData();
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function GetQuery();
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function GetRightToLeft();
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function GetStartMargin();
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      native function GetSuggestionToPrefetch();
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      native function IsFocused();
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function IsKeyCaptureEnabled();
25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      native function Paste();
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      native function SetVoiceSearchSupported();
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function StartCapturingKeyStrokes();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function StopCapturingKeyStrokes();
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      //                           Exported functions
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      this.__defineGetter__('displayInstantResults', GetDisplayInstantResults);
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('isFocused', IsFocused);
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('isKeyCaptureEnabled', IsKeyCaptureEnabled);
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('rtl', GetRightToLeft);
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('startMargin', GetStartMargin);
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      this.__defineGetter__('suggestion', GetSuggestionToPrefetch);
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('value', GetQuery);
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      this.focus = function() {
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        Focus();
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      };
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      // This method is restricted to chrome-search://most-visited pages by
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      // checking the invoking context's origin in searchbox_extension.cc.
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.getMostVisitedItemData = function(restrictedId) {
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return GetMostVisitedItemData(restrictedId);
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      };
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      this.paste = function(value) {
52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch        Paste(value);
53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      };
54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      this.setVoiceSearchSupported = function(supported) {
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        SetVoiceSearchSupported(supported);
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      };
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.startCapturingKeyStrokes = function() {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        StartCapturingKeyStrokes();
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      };
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.stopCapturingKeyStrokes = function() {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        StopCapturingKeyStrokes();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      };
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.onfocuschange = null;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.onkeycapturechange = null;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.onmarginchange = null;
707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.onsubmit = null;
71424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      this.onsuggestionchange = null;
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      this.ontogglevoicesearch = null;
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
74424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      //TODO(jered): Remove this empty method when google no longer requires it.
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.setRestrictedValue = function() {};
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    };
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    this.newTabPage = new function() {
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      //                            Private functions
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      native function CheckIsUserSignedInToChromeAs();
847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function DeleteMostVisitedItem();
857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function GetAppLauncherEnabled();
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      native function GetDispositionFromClick();
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function GetMostVisitedItems();
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function GetThemeBackgroundInfo();
897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function IsInputInProgress();
907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function LogEvent();
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      native function LogMostVisitedImpression();
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      native function LogMostVisitedNavigation();
937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      native function NavigateContentWindow();
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function UndoAllMostVisitedDeletions();
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      native function UndoMostVisitedDeletion();
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      function GetMostVisitedItemsWrapper() {
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        var mostVisitedItems = GetMostVisitedItems();
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        for (var i = 0, item; item = mostVisitedItems[i]; ++i) {
10058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch          item.faviconUrl = GenerateFaviconURL(item.renderViewId, item.rid);
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          // These properties are private data and should not be returned to
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          // the page. They are only accessible via getMostVisitedItemData().
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          item.url = null;
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          item.title = null;
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          item.domain = null;
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          item.direction = null;
10758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch          item.renderViewId = null;
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mostVisitedItems;
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch      function GenerateFaviconURL(renderViewId, rid) {
11358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch        return "chrome-search://favicon/size/16@" +
11458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch            window.devicePixelRatio + "x/" +
11558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch            renderViewId + "/" + rid;
11658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch      }
11758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      //                           Exported functions
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      // =======================================================================
1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('appLauncherEnabled', GetAppLauncherEnabled);
1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.__defineGetter__('isInputInProgress', IsInputInProgress);
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.__defineGetter__('mostVisited', GetMostVisitedItemsWrapper);
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.__defineGetter__('themeBackgroundInfo', GetThemeBackgroundInfo);
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.deleteMostVisitedItem = function(restrictedId) {
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        DeleteMostVisitedItem(restrictedId);
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      };
1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this.getDispositionFromClick = function(middle_button,
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                              alt_key,
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                              ctrl_key,
133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                              meta_key,
134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                              shift_key) {
135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        return GetDispositionFromClick(middle_button,
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                       alt_key,
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                       ctrl_key,
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                       meta_key,
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                       shift_key);
140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      };
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      this.checkIsUserSignedIntoChromeAs = function(identity) {
1430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        CheckIsUserSignedInToChromeAs(identity);
1440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      };
1450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      // This method is restricted to chrome-search://most-visited pages by
1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      // checking the invoking context's origin in searchbox_extension.cc.
1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.logEvent = function(histogram_name) {
1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        LogEvent(histogram_name);
1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      };
1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      // This method is restricted to chrome-search://most-visited pages by
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      // checking the invoking context's origin in searchbox_extension.cc.
154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this.logMostVisitedImpression = function(position, provider) {
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        LogMostVisitedImpression(position, provider);
156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      };
157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      // This method is restricted to chrome-search://most-visited pages by
159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      // checking the invoking context's origin in searchbox_extension.cc.
160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this.logMostVisitedNavigation = function(position, provider) {
161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        LogMostVisitedNavigation(position, provider);
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      };
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.navigateContentWindow = function(destination, disposition) {
1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        NavigateContentWindow(destination, disposition);
1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      };
1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.undoAllMostVisitedDeletions = function() {
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        UndoAllMostVisitedDeletions();
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      };
1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.undoMostVisitedDeletion = function(restrictedId) {
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        UndoMostVisitedDeletion(restrictedId);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      };
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      this.onsignedincheckdone = null;
1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.oninputcancel = null;
1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      this.oninputstart = null;
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.onmostvisitedchange = null;
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.onthemechange = null;
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    };
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    // TODO(jered): Remove when google no longer expects this object.
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chrome.searchBox = this.searchBox;
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
187