| // Copyright 2019 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. | 
 |  | 
 | import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; | 
 |  | 
 | /** @interface */ | 
 | export interface BrowserSwitchProxy { | 
 |   /** | 
 |    * @param URL to open in alternative browser. | 
 |    * @return A promise that can fail if unable to launch. It will never resolve, | 
 |    *     because the tab closes if this succeeds. | 
 |    */ | 
 |   launchAlternativeBrowserAndCloseTab(url: string): Promise<void>; | 
 |  | 
 |   gotoNewTabPage(): void; | 
 | } | 
 |  | 
 | export class BrowserSwitchProxyImpl implements BrowserSwitchProxy { | 
 |   launchAlternativeBrowserAndCloseTab(url: string) { | 
 |     return sendWithPromise('launchAlternativeBrowserAndCloseTab', url); | 
 |   } | 
 |  | 
 |   gotoNewTabPage() { | 
 |     chrome.send('gotoNewTabPage'); | 
 |   } | 
 |  | 
 |   static getInstance(): BrowserSwitchProxy { | 
 |     return instance || (instance = new BrowserSwitchProxyImpl()); | 
 |   } | 
 | } | 
 |  | 
 | let instance: BrowserSwitchProxy|null = null; |