11import { computed , observable , autorun } from 'mobx' ;
22import path from 'path' ;
33import normalizeUrl from 'normalize-url' ;
4+ import userAgent from '../helpers/userAgent-helpers' ;
45
56const debug = require ( 'debug' ) ( 'Franz:Service' ) ;
67
@@ -76,6 +77,8 @@ export default class Service {
7677
7778 @observable lastUsed = Date . now ( ) ; // timestamp
7879
80+ @observable chromelessUserAgent = false ;
81+
7982 constructor ( data , recipe ) {
8083 if ( ! data ) {
8184 console . error ( 'Service config not valid' ) ;
@@ -188,17 +191,34 @@ export default class Service {
188191 }
189192
190193 @computed get userAgent ( ) {
191- let userAgent = window . navigator . userAgent ;
194+ let ua = window . navigator . userAgent ;
192195 if ( typeof this . recipe . overrideUserAgent === 'function' ) {
193- userAgent = this . recipe . overrideUserAgent ( ) ;
196+ ua = this . recipe . overrideUserAgent ( ) ;
194197 }
195198
196- return userAgent ;
199+ return ua ;
197200 }
198201
199202 initializeWebViewEvents ( { handleIPCMessage, openWindow, stores } ) {
200203 const webContents = this . webview . getWebContents ( ) ;
201204
205+ const handleUserAgent = ( url , forwardingHack = false ) => {
206+ if ( url . startsWith ( 'https://accounts.google.com' ) ) {
207+ if ( ! this . chromelessUserAgent ) {
208+ debug ( 'Setting user agent to chromeless for url' , url ) ;
209+ this . webview . setUserAgent ( userAgent ( true ) ) ;
210+ if ( forwardingHack ) {
211+ this . webview . loadURL ( url ) ;
212+ }
213+ this . chromelessUserAgent = true ;
214+ }
215+ } else if ( this . chromelessUserAgent ) {
216+ debug ( 'Setting user agent to contain chrome' ) ;
217+ this . webview . setUserAgent ( this . userAgent ) ;
218+ this . chromelessUserAgent = false ;
219+ }
220+ } ;
221+
202222 this . webview . addEventListener ( 'ipc-message' , e => handleIPCMessage ( {
203223 serviceId : this . id ,
204224 channel : e . channel ,
@@ -215,6 +235,9 @@ export default class Service {
215235 } ) ;
216236 } ) ;
217237
238+
239+ this . webview . addEventListener ( 'will-navigate' , event => handleUserAgent ( event . url , true ) ) ;
240+
218241 this . webview . addEventListener ( 'did-start-loading' , ( event ) => {
219242 debug ( 'Did start load' , this . name , event ) ;
220243
@@ -232,7 +255,10 @@ export default class Service {
232255 } ;
233256
234257 this . webview . addEventListener ( 'did-frame-finish-load' , didLoad . bind ( this ) ) ;
235- this . webview . addEventListener ( 'did-navigate' , didLoad . bind ( this ) ) ;
258+ this . webview . addEventListener ( 'did-navigate' , ( event ) => {
259+ handleUserAgent ( event . url ) ;
260+ didLoad ( ) ;
261+ } ) ;
236262
237263 this . webview . addEventListener ( 'did-fail-load' , ( event ) => {
238264 debug ( 'Service failed to load' , this . name , event ) ;
0 commit comments