From 8779f1d5a335210fd21c8f98b5bbc9953d3028fc Mon Sep 17 00:00:00 2001 From: tobspr Date: Wed, 3 Jun 2020 16:10:34 +0200 Subject: [PATCH] Fix firefox not loading in private browsing mode --- src/js/application.js | 19 ++---- src/js/changelog.js | 6 ++ src/js/platform/browser/wrapper.js | 102 ++++++++++------------------ src/js/platform/electron/wrapper.js | 14 ++++ 4 files changed, 58 insertions(+), 83 deletions(-) diff --git a/src/js/application.js b/src/js/application.js index d337f94a..ce9fdd40 100644 --- a/src/js/application.js +++ b/src/js/application.js @@ -123,27 +123,16 @@ export class Application { initPlatformDependentInstances() { logger.log("Creating platform dependent instances"); - // Start with empty ad provider - this.adProvider = new NoAdProvider(this); - - if (G_IS_STANDALONE) { - this.storage = new StorageImplElectron(this); - } else { - if (window.indexedDB) { - this.storage = new StorageImplBrowserIndexedDB(this); - } else { - this.storage = new StorageImplBrowser(this); - } - } - this.sound = new SoundImplBrowser(this); - if (G_IS_STANDALONE) { this.platformWrapper = new PlatformWrapperImplElectron(this); } else { this.platformWrapper = new PlatformWrapperImplBrowser(this); } - this.analytics = new GoogleAnalyticsImpl(this); + // Start with empty ad provider + this.adProvider = new NoAdProvider(this); + this.sound = new SoundImplBrowser(this); + this.analytics = new GoogleAnalyticsImpl(this); this.gameAnalytics = new ShapezGameAnalytics(this); } diff --git a/src/js/changelog.js b/src/js/changelog.js index 163aac14..e4ee88e9 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,4 +1,10 @@ export const CHANGELOG = [ + { + version: "1.1.6", + date: "unreleased", + entries: ["Fixed firefox not loading the game when browsing in private mode"], + }, + { version: "1.1.5", date: "03.06.2020", diff --git a/src/js/platform/browser/wrapper.js b/src/js/platform/browser/wrapper.js index fa3f80b3..2fca004f 100644 --- a/src/js/platform/browser/wrapper.js +++ b/src/js/platform/browser/wrapper.js @@ -1,11 +1,13 @@ import { Math_min } from "../../core/builtins"; -import { globalConfig, IS_MOBILE, IS_DEBUG, IS_DEMO } from "../../core/config"; +import { globalConfig, IS_DEMO, IS_MOBILE } from "../../core/config"; import { createLogger } from "../../core/logging"; import { queryParamOptions } from "../../core/query_parameters"; import { clamp } from "../../core/utils"; +import { GamedistributionAdProvider } from "../ad_providers/gamedistribution"; import { NoAdProvider } from "../ad_providers/no_ad_provider"; import { PlatformWrapperInterface } from "../wrapper"; -import { GamedistributionAdProvider } from "../ad_providers/gamedistribution"; +import { StorageImplBrowser } from "./storage"; +import { StorageImplBrowserIndexedDB } from "./storage_indexed_db"; const logger = createLogger("platform/browser"); @@ -72,7 +74,36 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { logger.log("Embed provider:", this.embedProvider.id); - return super.initialize().then(() => this.initializeAdProvider()); + return this.detectStorageImplementation() + .then(() => this.initializeAdProvider()) + .then(() => super.initialize()); + } + + detectStorageImplementation() { + return new Promise(resolve => { + logger.log("Detecting storage"); + + if (!window.indexedDB) { + logger.log("Indexed DB not supported"); + this.app.storage = new StorageImplBrowser(this.app); + resolve(); + return; + } + + // Try accessing the indexedb + const request = window.indexedDB.open("indexeddb_feature_detection", 1); + request.onerror = err => { + logger.log("Indexed DB can *not* be accessed: ", err); + logger.log("Using fallback to local storage"); + this.app.storage = new StorageImplBrowser(this.app); + resolve(); + }; + request.onsuccess = () => { + logger.log("Indexed DB *can* be accessed"); + this.app.storage = new StorageImplBrowserIndexedDB(this.app); + resolve(); + }; + }); } getHasUnlimitedSavegames() { @@ -83,71 +114,6 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { return this.embedProvider.showDemoBadge; } - onSentryLoaded() { - logger.log("Initializing sentry"); - window.Sentry.init({ - dsn: "TODO SENTRY DSN", - release: G_APP_ENVIRONMENT + "-" + G_BUILD_VERSION + "@" + G_BUILD_COMMIT_HASH, - // Will cause a deprecation warning, but the demise of `ignoreErrors` is still under discussion. - // See: https://github.com/getsentry/raven-js/issues/73 - ignoreErrors: [ - // Random plugins/extensions - "top.GLOBALS", - // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error.html - "originalCreateNotification", - "canvas.contentDocument", - "MyApp_RemoveAllHighlights", - "http://tt.epicplay.com", - "Can't find variable: ZiteReader", - "jigsaw is not defined", - "ComboSearch is not defined", - "http://loading.retry.widdit.com/", - "atomicFindClose", - // Facebook borked - "fb_xd_fragment", - // ISP "optimizing" proxy - `Cache-Control: no-transform` seems to reduce this. (thanks @acdha) - // See http://stackoverflow.com/questions/4113268/how-to-stop-javascript-injection-from-vodafone-proxy - "bmi_SafeAddOnload", - "EBCallBackMessageReceived", - // See http://toolbar.conduit.com/Developer/HtmlAndGadget/Methods/JSInjection.aspx - "conduitPage", - // Generic error code from errors outside the security sandbox - // You can delete this if using raven.js > 1.0, which ignores these automatically. - "Script error.", - - // Errors from ads - "Cannot read property 'postMessage' of null", - - // Firefox only - "AbortError: The operation was aborted.", - - "", - ], - ignoreUrls: [ - // Facebook flakiness - /graph\.facebook\.com/i, - // Facebook blocked - /connect\.facebook\.net\/en_US\/all\.js/i, - // Woopra flakiness - /eatdifferent\.com\.woopra-ns\.com/i, - /static\.woopra\.com\/js\/woopra\.js/i, - // Chrome extensions - /extensions\//i, - /^chrome:\/\//i, - // Other plugins - /127\.0\.0\.1:4001\/isrunning/i, // Cacaoweb - /webappstoolbarba\.texthelp\.com\//i, - /metrics\.itunes\.apple\.com\.edgesuite\.net\//i, - ], - beforeSend(event, hint) { - if (window.anyModLoaded) { - return null; - } - return event; - }, - }); - } - getId() { return "browser@" + this.embedProvider.id; } diff --git a/src/js/platform/electron/wrapper.js b/src/js/platform/electron/wrapper.js index 70ebf3fc..482e41ea 100644 --- a/src/js/platform/electron/wrapper.js +++ b/src/js/platform/electron/wrapper.js @@ -1,10 +1,16 @@ import { PlatformWrapperImplBrowser } from "../browser/wrapper"; import { getIPCRenderer } from "../../core/utils"; import { createLogger } from "../../core/logging"; +import { StorageImplElectron } from "./storage"; const logger = createLogger("electron-wrapper"); export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { + initialize() { + this.app.storage = new StorageImplElectron(this); + return super.initialize(); + } + getId() { return "electron"; } @@ -22,6 +28,14 @@ export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { return false; } + getHasUnlimitedSavegames() { + return true; + } + + getShowDemoBadges() { + return false; + } + performRestart() { logger.log(this, "Performing restart"); window.location.reload(true);