diff --git a/src/ng/cookieReader.js b/src/ng/cookieReader.js index c1c4447a0146..ce04f812b57a 100644 --- a/src/ng/cookieReader.js +++ b/src/ng/cookieReader.js @@ -14,6 +14,14 @@ function $$CookieReader($document) { var lastCookies = {}; var lastCookieString = ''; + function safeGetCookie(rawDocument) { + try { + return rawDocument.cookie || ''; + } catch (e) { + return ''; + } + } + function safeDecodeURIComponent(str) { try { return decodeURIComponent(str); @@ -24,7 +32,7 @@ function $$CookieReader($document) { return function() { var cookieArray, cookie, i, index, name; - var currentCookieString = rawDocument.cookie || ''; + var currentCookieString = safeGetCookie(rawDocument); if (currentCookieString !== lastCookieString) { lastCookieString = currentCookieString; diff --git a/test/ng/cookieReaderSpec.js b/test/ng/cookieReaderSpec.js index dd1fdf2ab8ab..0cba8def6c78 100644 --- a/test/ng/cookieReaderSpec.js +++ b/test/ng/cookieReaderSpec.js @@ -103,3 +103,30 @@ describe('$$cookieReader', function() { }); + +describe('$$cookieReader with mock $document', function() { + + var $$cookieReader, mockDocument; + + beforeEach(function() { + mockDocument = {}; + module(function($provide) { + $provide.constant('$document', [mockDocument]); + }); + inject(function(_$$cookieReader_) { + $$cookieReader = _$$cookieReader_; + }); + }); + + describe('getAll via $$cookieReader()', function() { + + it('should return an empty object if cookies cannot be read', function() { + var cookieSpy = jasmine.createSpy('cookie').and.throwError('Can\'t touch this!'); + Object.defineProperty(mockDocument, 'cookie', { get: cookieSpy }); + expect($$cookieReader()).toEqual({}); + expect(cookieSpy).toHaveBeenCalled(); + }); + + }); + +});