diff --git a/package.json b/package.json index 57435db06..4b2a5120e 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "bundlesize": [ { "path": "resources/dist/index.js", - "maxSize": "14.3kB" + "maxSize": "14.4kB" } ] } diff --git a/resources/dist/index.js b/resources/dist/index.js index 1efc08e1f..f841607f5 100644 Binary files a/resources/dist/index.js and b/resources/dist/index.js differ diff --git a/resources/dist/index.js.map.json b/resources/dist/index.js.map.json index 0e187e0d0..ba41b2472 100644 Binary files a/resources/dist/index.js.map.json and b/resources/dist/index.js.map.json differ diff --git a/src/actions.js b/src/actions.js index 24bf9235b..00576bbb8 100644 --- a/src/actions.js +++ b/src/actions.js @@ -89,7 +89,7 @@ export function boot( id: config.get( 'wgArticleId' ) }, user: { - isAnon: user.isAnon(), + isAnon: user.isAnon() || mw.user.isTemp(), editCount } }; diff --git a/src/canSaveToUserPreferences.js b/src/canSaveToUserPreferences.js new file mode 100644 index 000000000..54d6a1973 --- /dev/null +++ b/src/canSaveToUserPreferences.js @@ -0,0 +1,11 @@ +/** + * Can the current user save to user preferences? + * + * @param {User} user + * @return {boolean} + */ +const canSaveToUserPreferences = ( user ) => { + return !user.isAnon() && user.isNamed(); +}; + +module.exports = canSaveToUserPreferences; diff --git a/src/isPagePreviewsEnabled.js b/src/isPagePreviewsEnabled.js index 0b2ed78dd..b751b1b21 100644 --- a/src/isPagePreviewsEnabled.js +++ b/src/isPagePreviewsEnabled.js @@ -1,6 +1,7 @@ /** * @module isPagePreviewsEnabled */ +const canSaveToUserPreferences = require( './canSaveToUserPreferences.js' ); /** * Given the global state of the application, creates a function that gets @@ -24,9 +25,9 @@ export default function isPagePreviewsEnabled( user, userSettings, config ) { return null; } - // For anonymous users, the code loads always, but the feature can be toggled at run-time via - // local storage. - if ( user.isAnon() ) { + // For anonymous users, and for IP masked usersm the code loads always, + // but the feature can be toggled at run-time via local storage. + if ( !canSaveToUserPreferences( user ) ) { return userSettings.isPagePreviewsEnabled(); } diff --git a/src/isReferencePreviewsEnabled.js b/src/isReferencePreviewsEnabled.js index 0576d0300..a9667f235 100644 --- a/src/isReferencePreviewsEnabled.js +++ b/src/isReferencePreviewsEnabled.js @@ -1,6 +1,7 @@ /** * @module isReferencePreviewsEnabled */ +const canSaveToUserPreferences = require( './canSaveToUserPreferences.js' ); /** * Given the global state of the application, creates a function that gets @@ -29,7 +30,7 @@ export default function isReferencePreviewsEnabled( user, userSettings, config ) // For anonymous users, the code loads always, but the feature can be toggled at run-time via // local storage. - if ( user.isAnon() ) { + if ( !canSaveToUserPreferences( user ) ) { return userSettings.isReferencePreviewsEnabled(); } diff --git a/src/previewBehavior.js b/src/previewBehavior.js index 4eb140682..8ab2e9fd5 100644 --- a/src/previewBehavior.js +++ b/src/previewBehavior.js @@ -1,6 +1,7 @@ /** * @module previewBehaviour */ +const canSaveToUserPreferences = require( './canSaveToUserPreferences.js' ); /** * A collection of event handlers specific to how the user interacts with all @@ -33,7 +34,7 @@ export default function createPreviewBehavior( user, actions ) { let settingsUrl, showSettings = () => {}; - if ( user.isAnon() ) { + if ( !canSaveToUserPreferences( user ) ) { showSettings = ( event ) => { event.preventDefault(); diff --git a/tests/node-qunit/isReferencePreviewsEnabled.test.js b/tests/node-qunit/isReferencePreviewsEnabled.test.js index e9cb58a4d..31ad3a63e 100644 --- a/tests/node-qunit/isReferencePreviewsEnabled.test.js +++ b/tests/node-qunit/isReferencePreviewsEnabled.test.js @@ -123,7 +123,10 @@ QUnit.test( 'all relevant combinations of flags', ( assert ) => { expected: null } ].forEach( ( data ) => { - const user = { isAnon: () => data.isAnon }, + const user = { + isNamed: () => !data.isAnon && !data.isIPMasked, + isAnon: () => data.isAnon + }, userSettings = { isReferencePreviewsEnabled: () => data.isAnon ? data.enabledByAnon : diff --git a/tests/node-qunit/stubs.js b/tests/node-qunit/stubs.js index dcd39e8dc..f243f35a2 100644 --- a/tests/node-qunit/stubs.js +++ b/tests/node-qunit/stubs.js @@ -10,6 +10,12 @@ export function createStubUser( isAnon ) { getPageviewToken() { return '9876543210'; }, + isNamed() { + return !isAnon; + }, + isTemp() { + return false; + }, isAnon() { return isAnon; }, diff --git a/webpack.config.js b/webpack.config.js index ab3d1f18a..7c06397e9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -112,8 +112,8 @@ module.exports = ( env, argv ) => ( { // Minified uncompressed size limits for chunks / assets and entrypoints. Keep these numbers // up-to-date and rounded to the nearest 10th of a kibibyte so that code sizing costs are // well understood. Related to bundlesize minified, gzipped compressed file size tests. - maxAssetSize: 45.5 * 1024, - maxEntrypointSize: 45.5 * 1024, + maxAssetSize: 45.6 * 1024, + maxEntrypointSize: 45.6 * 1024, // The default filter excludes map files but we rename ours. assetFilter: ( filename ) => !filename.endsWith( srcMapExt )