diff --git a/app/browser/extensions.ts b/app/browser/extensions.ts index 5be96c3f..1fd586c8 100644 --- a/app/browser/extensions.ts +++ b/app/browser/extensions.ts @@ -1,11 +1,12 @@ import fs from 'fs-extra' import path from 'path' -import { app, session, componentUpdater, ipcMain, BrowserWindow } from 'electron' +import { app, componentUpdater, ipcMain, BrowserWindow } from 'electron' import * as settings from 'electron-settings' import log from './log' import * as widevine from 'constants/widevine' import { fileUrl } from 'utils/appUrl' import * as walkdir from 'walkdir' +import { getMediaSession } from './session' const extVerRegex = /^[\d._]+$/ const isExtVersion = (dirName: string) => !!extVerRegex.exec(dirName) @@ -44,7 +45,6 @@ const disableExtension = (session: Electron.session, extId: string) => { } const getActiveExtensions = () => Array.from(activeExtensions) -const getSession = () => session.fromPartition('persist:mediaplayer', { cache: true }) const APP_EXTENSIONS = new Set([ 'dfmpchfgfkhhkigicpheeacmlkbomihe' /*enhanced-media-viewer*/, @@ -63,7 +63,7 @@ export function initExtensions() { loadComponents() } - const mediaSession = getSession() + const mediaSession = getMediaSession() loadMediaExtensions(mediaSession) loadVendorExtensions(mediaSession) initIpc(mediaSession) @@ -84,7 +84,7 @@ function initProcessListeners() { }) if (isVendorExtension(info) && !activeExtensions.has(info.id)) { - disableExtension(getSession(), info.id) + disableExtension(getMediaSession(), info.id) } }) @@ -264,7 +264,7 @@ function ipcError(sender: Electron.WebContents, err: Error) { async function ipcSet(event: Electron.Event, extId: string, enable: boolean) { log.debug(`[Extension] Setting extension ${extId} to ${enable}`) - const session = getSession() + const session = getMediaSession() if (enable) { enableExtension(session, extId) } else { @@ -278,7 +278,7 @@ function ipcStatus(event: Electron.Event) { } function ipcReload(event: Electron.Event) { - loadVendorExtensions(getSession()) + loadVendorExtensions(getMediaSession()) onExtensionsChange() } diff --git a/app/browser/session.ts b/app/browser/session.ts new file mode 100644 index 00000000..78fac2c9 --- /dev/null +++ b/app/browser/session.ts @@ -0,0 +1,11 @@ +import { session } from 'electron' +import { WEBVIEW_PARTITION } from 'constants/http' + +let mediaSession: Electron.Session + +export const getMediaSession = () => { + if (!mediaSession) { + mediaSession = session.fromPartition(WEBVIEW_PARTITION, { cache: true }) + } + return mediaSession +} diff --git a/app/constants/http.ts b/app/constants/http.ts index 34c15683..5acc9773 100644 --- a/app/constants/http.ts +++ b/app/constants/http.ts @@ -9,6 +9,13 @@ const defaultUserAgent = const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : defaultUserAgent export const MEDIA_USER_AGENT = `${userAgent} (Googlebot)` +/** + * User agent override to prevent sniffing from breaking apps until + * issue #1 can be resolved. + */ +export const MEDIA_SESSION_USER_AGENT = + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36' + export const APP_WEBSITE = 'https://getmetastream.com/' export const MEDIA_REFERRER = APP_WEBSITE diff --git a/app/renderer/components/browser/WebBrowser.tsx b/app/renderer/components/browser/WebBrowser.tsx index fb9ef728..01e62358 100644 --- a/app/renderer/components/browser/WebBrowser.tsx +++ b/app/renderer/components/browser/WebBrowser.tsx @@ -11,8 +11,6 @@ import { IReactReduxProps } from 'types/redux-thunk' const { ipcRenderer, remote } = chrome const DEFAULT_URL = absoluteUrl('./browser/resources/homescreen.html') -// const DEFAULT_URL = 'https://www.google.com/'; -// const DEFAULT_URL = 'data:text/html,B R O W S E R'; interface IProps { className?: string diff --git a/app/renderer/components/lobby/VideoPlayer.tsx b/app/renderer/components/lobby/VideoPlayer.tsx index bba7682d..f5084a1a 100644 --- a/app/renderer/components/lobby/VideoPlayer.tsx +++ b/app/renderer/components/lobby/VideoPlayer.tsx @@ -14,7 +14,7 @@ import { DispatchProp, connect } from 'react-redux' import { PlaybackControls } from 'renderer/components/media/PlaybackControls' import { setVolume } from 'renderer/actions/settings' import { clamp } from 'utils/math' -import { WEBVIEW_PARTITION, MEDIA_REFERRER } from 'constants/http' +import { WEBVIEW_PARTITION, MEDIA_REFERRER, MEDIA_SESSION_USER_AGENT } from 'constants/http' import { absoluteUrl } from 'utils/appUrl' import { IAppState } from 'renderer/reducers' import { getPlaybackTime2 } from 'renderer/lobby/reducers/mediaPlayer.helpers' @@ -310,7 +310,10 @@ class _VideoPlayer extends PureComponent { // this.updatePlayback(PlaybackState.Paused); if (this.webContents) { - this.webContents.loadURL(this.mediaUrl, { httpReferrer: this.httpReferrer }) + this.webContents.loadURL(this.mediaUrl, { + httpReferrer: this.httpReferrer, + userAgent: MEDIA_SESSION_USER_AGENT + }) } ipcRenderer.send('media-cleanup')