$SnifferProvider incorrectly detect NW.js as not supporting history API #15474
Description
Note: for support questions, please use one of these channels: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#question. This repository's issues are reserved for feature requests and bug reports.
Do you want to request a feature or report a bug?
bug
What is the current behavior?
$SnifferProvider
detects NW.js as Chrome App, therefore not supporting history API. This caused angular-ui-router buggy with html5Mode
on.
If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via https://plnkr.co or similar (template: http://plnkr.co/edit/tpl:yBpEi4).
Load an Angular.js app in NW.js and check the value of $sniffer.history
in DevTools. See nwjs/nw.js#5478 for sample app.
What is the expected behavior?
Should return true
for NW.js app
What is the motivation / use case for changing the behavior?
See nwjs/nw.js#5478
Which versions of Angular, and which browser / OS are affected by this issue? Did this work in previous versions of Angular? Please also test with the latest stable and snapshot (https://code.angularjs.org/snapshot/) versions.
1.5.7
Other information (e.g. stacktraces, related issues, suggestions how to fix)
NW.js app can make use both Chrome App APIs and Node.js APIs. So $SnifferProvider
detects NW.js app as Chrome App. But NW.js app supports HTML5 history API, which is different from Chrome App.
Fix can be done by changing following lines in $SnifferProvider
:
isNwjs = $window.nw && $window.nw.process,
hasHistoryPushState = (isNwjs || !isChromePackagedApp) && $window.history && $window.history.pushState,