Remove FileError interface
FileError was removed from File API [1] after Chrome had shipped the
functionality. Other browsers do not use it, returning a DOMError
instead. Using the `code` property has been logging deprecation
warnings since August 2013. The affected APIs will now yield
DOMExceptions instead (as DOMError is being removed from the platform
[2]). Script should inspect the `name` and `message` properties of the
error objects.
This affects:
* FileReader.error
* FileWriter.error
* FileSystem async API: passed to ErrorCallback on failure
* FileSystem sync API: thrown on failure
Intent: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/kJMa2rpAYqI
Dashboard: https://www.chromestatus.com/feature/6687420359639040
[1] https://w3c.github.io/FileAPI/
[2] https://dom.spec.whatwg.org/#domerror
BUG=496901
R=foolip@chromium.org
Review-Url: https://codereview.chromium.org/2040563002
Cr-Commit-Position: refs/heads/master@{#406169}
diff --git a/third_party/WebKit/LayoutTests/fast/dom/script-tests/constructed-objects-prototypes.js b/third_party/WebKit/LayoutTests/fast/dom/script-tests/constructed-objects-prototypes.js
index 4c83d40..1ebf908 100644
--- a/third_party/WebKit/LayoutTests/fast/dom/script-tests/constructed-objects-prototypes.js
+++ b/third_party/WebKit/LayoutTests/fast/dom/script-tests/constructed-objects-prototypes.js
@@ -39,7 +39,6 @@
type =="Uint8ClampedArrayConstructor" ||
type =="Uint16ArrayConstructor" ||
type =="Uint32ArrayConstructor" ||
- type == "FileErrorConstructor" ||
type == "FileReaderConstructor" ||
type == "AudioContextConstructor" ||
type == "SpeechSynthesisUtteranceConstructor")
diff --git a/third_party/WebKit/LayoutTests/fast/js/script-tests/global-constructors.js b/third_party/WebKit/LayoutTests/fast/js/script-tests/global-constructors.js
index 1be91ef..b9b1ff9 100644
--- a/third_party/WebKit/LayoutTests/fast/js/script-tests/global-constructors.js
+++ b/third_party/WebKit/LayoutTests/fast/js/script-tests/global-constructors.js
@@ -40,7 +40,6 @@
name == "Uint32Array" ||
name == "Float32Array" ||
name == "Float64Array" ||
- name == "FileError" ||
name == "FileReader")
continue;
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector/isolated-filesystem-test.js b/third_party/WebKit/LayoutTests/http/tests/inspector/isolated-filesystem-test.js
index 1ac85af..3929c0d 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector/isolated-filesystem-test.js
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector/isolated-filesystem-test.js
@@ -142,7 +142,7 @@
var entry = this;
for (var token of path.split("/"))
entry = entry._childrenMap[token];
- entry ? callback(entry) : errorCallback({ code: FileError.NOT_FOUND_ERR});
+ entry ? callback(entry) : errorCallback(new DOMException('Path not found: ' + path, 'NotFoundError'));
},
getMetadata: function(success, failure)
diff --git a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index fc71a38..9253523 100644
--- a/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -206,21 +206,6 @@
getter name
getter webkitRelativePath
method constructor
-interface FileError : DOMError
- attribute ABORT_ERR
- attribute ENCODING_ERR
- attribute INVALID_MODIFICATION_ERR
- attribute INVALID_STATE_ERR
- attribute NOT_FOUND_ERR
- attribute NOT_READABLE_ERR
- attribute NO_MODIFICATION_ALLOWED_ERR
- attribute PATH_EXISTS_ERR
- attribute QUOTA_EXCEEDED_ERR
- attribute SECURITY_ERR
- attribute SYNTAX_ERR
- attribute TYPE_MISMATCH_ERR
- getter code
- method constructor
interface FileList
getter length
method constructor
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/historical-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/historical-expected.txt
index 0a9dceb..deac009 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/historical-expected.txt
+++ b/third_party/WebKit/LayoutTests/imported/wpt/FileAPI/historical-expected.txt
@@ -1,6 +1,6 @@
This is a testharness.js-based test.
PASS "toNativeLineEndings" should not be supported
-FAIL "FileError" should not be supported assert_false: expected false got true
+PASS "FileError" should not be supported
PASS "FileException" should not be supported
PASS Blob should not support slice prefixed
PASS BlobBuilder should not be supported.
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 5c20efc..447ed73 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -192,21 +192,6 @@
getter name
getter webkitRelativePath
method constructor
-interface FileError : DOMError
- attribute ABORT_ERR
- attribute ENCODING_ERR
- attribute INVALID_MODIFICATION_ERR
- attribute INVALID_STATE_ERR
- attribute NOT_FOUND_ERR
- attribute NOT_READABLE_ERR
- attribute NO_MODIFICATION_ALLOWED_ERR
- attribute PATH_EXISTS_ERR
- attribute QUOTA_EXCEEDED_ERR
- attribute SECURITY_ERR
- attribute SYNTAX_ERR
- attribute TYPE_MISMATCH_ERR
- getter code
- method constructor
interface FileList
getter length
method constructor
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
index 39350da..da7ce275 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -197,22 +197,6 @@
[Worker] getter name
[Worker] getter webkitRelativePath
[Worker] method constructor
-[Worker] interface FileError : DOMError
-[Worker] attribute @@toStringTag
-[Worker] attribute ABORT_ERR
-[Worker] attribute ENCODING_ERR
-[Worker] attribute INVALID_MODIFICATION_ERR
-[Worker] attribute INVALID_STATE_ERR
-[Worker] attribute NOT_FOUND_ERR
-[Worker] attribute NOT_READABLE_ERR
-[Worker] attribute NO_MODIFICATION_ALLOWED_ERR
-[Worker] attribute PATH_EXISTS_ERR
-[Worker] attribute QUOTA_EXCEEDED_ERR
-[Worker] attribute SECURITY_ERR
-[Worker] attribute SYNTAX_ERR
-[Worker] attribute TYPE_MISMATCH_ERR
-[Worker] getter code
-[Worker] method constructor
[Worker] interface FileList
[Worker] attribute @@toStringTag
[Worker] getter length
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
index adcf8b3f..66d5100b 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -1226,22 +1226,6 @@
getter name
getter webkitRelativePath
method constructor
-interface FileError : DOMError
- attribute @@toStringTag
- attribute ABORT_ERR
- attribute ENCODING_ERR
- attribute INVALID_MODIFICATION_ERR
- attribute INVALID_STATE_ERR
- attribute NOT_FOUND_ERR
- attribute NOT_READABLE_ERR
- attribute NO_MODIFICATION_ALLOWED_ERR
- attribute PATH_EXISTS_ERR
- attribute QUOTA_EXCEEDED_ERR
- attribute SECURITY_ERR
- attribute SYNTAX_ERR
- attribute TYPE_MISMATCH_ERR
- getter code
- method constructor
interface FileList
attribute @@toStringTag
getter length
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
index e489b87b..1dba26e8 100644
--- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -184,22 +184,6 @@
[Worker] getter name
[Worker] getter webkitRelativePath
[Worker] method constructor
-[Worker] interface FileError : DOMError
-[Worker] attribute @@toStringTag
-[Worker] attribute ABORT_ERR
-[Worker] attribute ENCODING_ERR
-[Worker] attribute INVALID_MODIFICATION_ERR
-[Worker] attribute INVALID_STATE_ERR
-[Worker] attribute NOT_FOUND_ERR
-[Worker] attribute NOT_READABLE_ERR
-[Worker] attribute NO_MODIFICATION_ALLOWED_ERR
-[Worker] attribute PATH_EXISTS_ERR
-[Worker] attribute QUOTA_EXCEEDED_ERR
-[Worker] attribute SECURITY_ERR
-[Worker] attribute SYNTAX_ERR
-[Worker] attribute TYPE_MISMATCH_ERR
-[Worker] getter code
-[Worker] method constructor
[Worker] interface FileList
[Worker] attribute @@toStringTag
[Worker] getter length
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
index e2f80f0e..cf2e37e7 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -214,22 +214,6 @@
[Worker] getter name
[Worker] getter webkitRelativePath
[Worker] method constructor
-[Worker] interface FileError : DOMError
-[Worker] attribute @@toStringTag
-[Worker] attribute ABORT_ERR
-[Worker] attribute ENCODING_ERR
-[Worker] attribute INVALID_MODIFICATION_ERR
-[Worker] attribute INVALID_STATE_ERR
-[Worker] attribute NOT_FOUND_ERR
-[Worker] attribute NOT_READABLE_ERR
-[Worker] attribute NO_MODIFICATION_ALLOWED_ERR
-[Worker] attribute PATH_EXISTS_ERR
-[Worker] attribute QUOTA_EXCEEDED_ERR
-[Worker] attribute SECURITY_ERR
-[Worker] attribute SYNTAX_ERR
-[Worker] attribute TYPE_MISMATCH_ERR
-[Worker] getter code
-[Worker] method constructor
[Worker] interface FileList
[Worker] attribute @@toStringTag
[Worker] getter length
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
index b166017d..11bac31 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -1716,22 +1716,6 @@
getter name
getter webkitRelativePath
method constructor
-interface FileError : DOMError
- attribute @@toStringTag
- attribute ABORT_ERR
- attribute ENCODING_ERR
- attribute INVALID_MODIFICATION_ERR
- attribute INVALID_STATE_ERR
- attribute NOT_FOUND_ERR
- attribute NOT_READABLE_ERR
- attribute NO_MODIFICATION_ALLOWED_ERR
- attribute PATH_EXISTS_ERR
- attribute QUOTA_EXCEEDED_ERR
- attribute SECURITY_ERR
- attribute SYNTAX_ERR
- attribute TYPE_MISMATCH_ERR
- getter code
- method constructor
interface FileList
attribute @@toStringTag
getter length
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
index 124b556..ff9fc06 100644
--- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -201,22 +201,6 @@
[Worker] getter name
[Worker] getter webkitRelativePath
[Worker] method constructor
-[Worker] interface FileError : DOMError
-[Worker] attribute @@toStringTag
-[Worker] attribute ABORT_ERR
-[Worker] attribute ENCODING_ERR
-[Worker] attribute INVALID_MODIFICATION_ERR
-[Worker] attribute INVALID_STATE_ERR
-[Worker] attribute NOT_FOUND_ERR
-[Worker] attribute NOT_READABLE_ERR
-[Worker] attribute NO_MODIFICATION_ALLOWED_ERR
-[Worker] attribute PATH_EXISTS_ERR
-[Worker] attribute QUOTA_EXCEEDED_ERR
-[Worker] attribute SECURITY_ERR
-[Worker] attribute SYNTAX_ERR
-[Worker] attribute TYPE_MISMATCH_ERR
-[Worker] getter code
-[Worker] method constructor
[Worker] interface FileList
[Worker] attribute @@toStringTag
[Worker] getter length
diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi
index c635ed9..756e5034 100644
--- a/third_party/WebKit/Source/core/core.gypi
+++ b/third_party/WebKit/Source/core/core.gypi
@@ -155,7 +155,6 @@
'fileapi/Blob.idl',
'fileapi/File.idl',
'fileapi/BlobCallback.idl',
- 'fileapi/FileError.idl',
'fileapi/FileList.idl',
'fileapi/FileReader.idl',
'fileapi/FileReaderSync.idl',
diff --git a/third_party/WebKit/Source/core/fileapi/FileError.cpp b/third_party/WebKit/Source/core/fileapi/FileError.cpp
index 4e17dd5..0f5813f 100644
--- a/third_party/WebKit/Source/core/fileapi/FileError.cpp
+++ b/third_party/WebKit/Source/core/fileapi/FileError.cpp
@@ -31,52 +31,55 @@
#include "core/fileapi/FileError.h"
#include "bindings/core/v8/ExceptionState.h"
+#include "core/dom/DOMException.h"
#include "core/dom/ExceptionCode.h"
namespace blink {
-const char FileError::abortErrorMessage[] = "An ongoing operation was aborted, typically with a call to abort().";
-const char FileError::encodingErrorMessage[] = "A URI supplied to the API was malformed, or the resulting Data URL has exceeded the URL length limitations for Data URLs.";
-const char FileError::invalidStateErrorMessage[] = "An operation that depends on state cached in an interface object was made but the state had changed since it was read from disk.";
-const char FileError::noModificationAllowedErrorMessage[] = "An attempt was made to write to a file or directory which could not be modified due to the state of the underlying filesystem.";
-const char FileError::notFoundErrorMessage[] = "A requested file or directory could not be found at the time an operation was processed.";
-const char FileError::notReadableErrorMessage[] = "The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.";
-const char FileError::pathExistsErrorMessage[] = "An attempt was made to create a file or directory where an element already exists.";
-const char FileError::quotaExceededErrorMessage[] = "The operation failed because it would cause the application to exceed its storage quota.";
-const char FileError::securityErrorMessage[] = "It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.";
-const char FileError::syntaxErrorMessage[] = "An invalid or unsupported argument was given, like an invalid line ending specifier.";
-const char FileError::typeMismatchErrorMessage[] = "The path supplied exists, but was not an entry of requested type.";
+namespace FileError {
+
+const char abortErrorMessage[] = "An ongoing operation was aborted, typically with a call to abort().";
+const char encodingErrorMessage[] = "A URI supplied to the API was malformed, or the resulting Data URL has exceeded the URL length limitations for Data URLs.";
+const char invalidStateErrorMessage[] = "An operation that depends on state cached in an interface object was made but the state had changed since it was read from disk.";
+const char noModificationAllowedErrorMessage[] = "An attempt was made to write to a file or directory which could not be modified due to the state of the underlying filesystem.";
+const char notFoundErrorMessage[] = "A requested file or directory could not be found at the time an operation was processed.";
+const char notReadableErrorMessage[] = "The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.";
+const char pathExistsErrorMessage[] = "An attempt was made to create a file or directory where an element already exists.";
+const char quotaExceededErrorMessage[] = "The operation failed because it would cause the application to exceed its storage quota.";
+const char securityErrorMessage[] = "It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.";
+const char syntaxErrorMessage[] = "An invalid or unsupported argument was given, like an invalid line ending specifier.";
+const char typeMismatchErrorMessage[] = "The path supplied exists, but was not an entry of requested type.";
namespace {
-ExceptionCode errorCodeToExceptionCode(FileError::ErrorCode code)
+ExceptionCode errorCodeToExceptionCode(ErrorCode code)
{
switch (code) {
- case FileError::OK:
+ case OK:
return 0;
- case FileError::NOT_FOUND_ERR:
+ case NOT_FOUND_ERR:
return NotFoundError;
- case FileError::SECURITY_ERR:
+ case SECURITY_ERR:
return SecurityError;
- case FileError::ABORT_ERR:
+ case ABORT_ERR:
return AbortError;
- case FileError::NOT_READABLE_ERR:
+ case NOT_READABLE_ERR:
return NotReadableError;
- case FileError::ENCODING_ERR:
+ case ENCODING_ERR:
return EncodingError;
- case FileError::NO_MODIFICATION_ALLOWED_ERR:
+ case NO_MODIFICATION_ALLOWED_ERR:
return NoModificationAllowedError;
- case FileError::INVALID_STATE_ERR:
+ case INVALID_STATE_ERR:
return InvalidStateError;
- case FileError::SYNTAX_ERR:
+ case SYNTAX_ERR:
return SyntaxError;
- case FileError::INVALID_MODIFICATION_ERR:
+ case INVALID_MODIFICATION_ERR:
return InvalidModificationError;
- case FileError::QUOTA_EXCEEDED_ERR:
+ case QUOTA_EXCEEDED_ERR:
return QuotaExceededError;
- case FileError::TYPE_MISMATCH_ERR:
+ case TYPE_MISMATCH_ERR:
return TypeMismatchError;
- case FileError::PATH_EXISTS_ERR:
+ case PATH_EXISTS_ERR:
return PathExistsError;
default:
ASSERT_NOT_REACHED();
@@ -84,36 +87,36 @@
}
}
-const char* errorCodeToMessage(FileError::ErrorCode code)
+const char* errorCodeToMessage(ErrorCode code)
{
// Note that some of these do not set message. If message is 0 then the default message is used.
switch (code) {
- case FileError::OK:
+ case OK:
return 0;
- case FileError::SECURITY_ERR:
- return FileError::securityErrorMessage;
- case FileError::NOT_FOUND_ERR:
- return FileError::notFoundErrorMessage;
- case FileError::ABORT_ERR:
- return FileError::abortErrorMessage;
- case FileError::NOT_READABLE_ERR:
- return FileError::notReadableErrorMessage;
- case FileError::ENCODING_ERR:
- return FileError::encodingErrorMessage;
- case FileError::NO_MODIFICATION_ALLOWED_ERR:
- return FileError::noModificationAllowedErrorMessage;
- case FileError::INVALID_STATE_ERR:
- return FileError::invalidStateErrorMessage;
- case FileError::SYNTAX_ERR:
- return FileError::syntaxErrorMessage;
- case FileError::INVALID_MODIFICATION_ERR:
+ case SECURITY_ERR:
+ return securityErrorMessage;
+ case NOT_FOUND_ERR:
+ return notFoundErrorMessage;
+ case ABORT_ERR:
+ return abortErrorMessage;
+ case NOT_READABLE_ERR:
+ return notReadableErrorMessage;
+ case ENCODING_ERR:
+ return encodingErrorMessage;
+ case NO_MODIFICATION_ALLOWED_ERR:
+ return noModificationAllowedErrorMessage;
+ case INVALID_STATE_ERR:
+ return invalidStateErrorMessage;
+ case SYNTAX_ERR:
+ return syntaxErrorMessage;
+ case INVALID_MODIFICATION_ERR:
return 0;
- case FileError::QUOTA_EXCEEDED_ERR:
- return FileError::quotaExceededErrorMessage;
- case FileError::TYPE_MISMATCH_ERR:
+ case QUOTA_EXCEEDED_ERR:
+ return quotaExceededErrorMessage;
+ case TYPE_MISMATCH_ERR:
return 0;
- case FileError::PATH_EXISTS_ERR:
- return FileError::pathExistsErrorMessage;
+ case PATH_EXISTS_ERR:
+ return pathExistsErrorMessage;
default:
ASSERT_NOT_REACHED();
return 0;
@@ -122,24 +125,26 @@
} // namespace
-void FileError::throwDOMException(ExceptionState& exceptionState, ErrorCode code)
+void throwDOMException(ExceptionState& exceptionState, ErrorCode code)
{
- if (code == FileError::OK)
+ if (code == OK)
return;
// SecurityError is special-cased, as we want to route those exceptions through ExceptionState::throwSecurityError.
- if (code == FileError::SECURITY_ERR) {
- exceptionState.throwSecurityError(FileError::securityErrorMessage);
+ if (code == SECURITY_ERR) {
+ exceptionState.throwSecurityError(securityErrorMessage);
return;
}
exceptionState.throwDOMException(errorCodeToExceptionCode(code), errorCodeToMessage(code));
}
-FileError::FileError(ErrorCode code)
- : DOMError(DOMException::getErrorName(errorCodeToExceptionCode(code)), errorCodeToMessage(code))
- , m_code(code)
+DOMException* createDOMException(ErrorCode code)
{
+ DCHECK_NE(code, OK);
+ return DOMException::create(errorCodeToExceptionCode(code), errorCodeToMessage(code));
}
+} // namespace FileError
+
} // namespace blink
diff --git a/third_party/WebKit/Source/core/fileapi/FileError.h b/third_party/WebKit/Source/core/fileapi/FileError.h
index 0d9c65f3..2c18bd1 100644
--- a/third_party/WebKit/Source/core/fileapi/FileError.h
+++ b/third_party/WebKit/Source/core/fileapi/FileError.h
@@ -31,18 +31,15 @@
#ifndef FileError_h
#define FileError_h
-#include "bindings/core/v8/ScriptWrappable.h"
#include "core/CoreExport.h"
-#include "core/dom/DOMError.h"
-#include "platform/heap/Handle.h"
namespace blink {
+class DOMException;
class ExceptionState;
-class CORE_EXPORT FileError final : public DOMError {
- DEFINE_WRAPPERTYPEINFO();
-public:
+namespace FileError {
+
enum ErrorCode {
OK = 0,
NOT_FOUND_ERR = 1,
@@ -59,32 +56,22 @@
PATH_EXISTS_ERR = 12,
};
- static const char abortErrorMessage[];
- static const char encodingErrorMessage[];
- static const char invalidStateErrorMessage[];
- static const char noModificationAllowedErrorMessage[];
- static const char notFoundErrorMessage[];
- static const char notReadableErrorMessage[];
- static const char pathExistsErrorMessage[];
- static const char quotaExceededErrorMessage[];
- static const char securityErrorMessage[];
- static const char syntaxErrorMessage[];
- static const char typeMismatchErrorMessage[];
+ CORE_EXPORT extern const char abortErrorMessage[];
+ CORE_EXPORT extern const char encodingErrorMessage[];
+ CORE_EXPORT extern const char invalidStateErrorMessage[];
+ CORE_EXPORT extern const char noModificationAllowedErrorMessage[];
+ CORE_EXPORT extern const char notFoundErrorMessage[];
+ CORE_EXPORT extern const char notReadableErrorMessage[];
+ CORE_EXPORT extern const char pathExistsErrorMessage[];
+ CORE_EXPORT extern const char quotaExceededErrorMessage[];
+ CORE_EXPORT extern const char securityErrorMessage[];
+ CORE_EXPORT extern const char syntaxErrorMessage[];
+ CORE_EXPORT extern const char typeMismatchErrorMessage[];
- static FileError* create(ErrorCode code)
- {
- return new FileError(code);
- }
+ CORE_EXPORT void throwDOMException(ExceptionState&, ErrorCode);
+ CORE_EXPORT DOMException* createDOMException(ErrorCode);
- ErrorCode code() const { return m_code; }
-
- static void throwDOMException(ExceptionState&, ErrorCode);
-
-private:
- explicit FileError(ErrorCode);
-
- ErrorCode m_code;
-};
+} // namespace FileError
} // namespace blink
diff --git a/third_party/WebKit/Source/core/fileapi/FileError.idl b/third_party/WebKit/Source/core/fileapi/FileError.idl
deleted file mode 100644
index b8c2904..0000000
--- a/third_party/WebKit/Source/core/fileapi/FileError.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// TODO(foolip): Remove the FileError interface. crbug.com/496901
-[Exposed=(Window,Worker)]
-interface FileError : DOMError {
- const unsigned short NOT_FOUND_ERR = 1;
- const unsigned short SECURITY_ERR = 2;
- const unsigned short ABORT_ERR = 3;
- const unsigned short NOT_READABLE_ERR = 4;
- const unsigned short ENCODING_ERR = 5;
- const unsigned short NO_MODIFICATION_ALLOWED_ERR = 6;
- const unsigned short INVALID_STATE_ERR = 7;
- const unsigned short SYNTAX_ERR = 8;
- const unsigned short INVALID_MODIFICATION_ERR = 9;
- const unsigned short QUOTA_EXCEEDED_ERR = 10;
- const unsigned short TYPE_MISMATCH_ERR = 11;
- const unsigned short PATH_EXISTS_ERR = 12;
-
- [DeprecateAs=FileError] readonly attribute unsigned short code;
-};
diff --git a/third_party/WebKit/Source/core/fileapi/FileReader.cpp b/third_party/WebKit/Source/core/fileapi/FileReader.cpp
index f1d3237..eba2df1 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReader.cpp
+++ b/third_party/WebKit/Source/core/fileapi/FileReader.cpp
@@ -347,7 +347,7 @@
terminate();
- m_error = FileError::create(FileError::ABORT_ERR);
+ m_error = FileError::createDOMException(FileError::ABORT_ERR);
// Unregister the reader.
ThrottlingController::FinishReaderType finalStep = ThrottlingController::removeReader(getExecutionContext(), this);
@@ -446,7 +446,7 @@
ASSERT(m_state != DONE);
m_state = DONE;
- m_error = FileError::create(static_cast<FileError::ErrorCode>(errorCode));
+ m_error = FileError::createDOMException(static_cast<FileError::ErrorCode>(errorCode));
// Unregister the reader.
ThrottlingController::FinishReaderType finalStep = ThrottlingController::removeReader(getExecutionContext(), this);
diff --git a/third_party/WebKit/Source/core/fileapi/FileReader.h b/third_party/WebKit/Source/core/fileapi/FileReader.h
index d960570c..c619f9e 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReader.h
+++ b/third_party/WebKit/Source/core/fileapi/FileReader.h
@@ -73,7 +73,7 @@
void doAbort();
ReadyState getReadyState() const { return m_state; }
- FileError* error() { return m_error; }
+ DOMException* error() { return m_error; }
void result(StringOrArrayBuffer& resultAttribute) const;
// ActiveDOMObject
@@ -131,7 +131,7 @@
String m_encoding;
std::unique_ptr<FileReaderLoader> m_loader;
- Member<FileError> m_error;
+ Member<DOMException> m_error;
double m_lastProgressNotificationTimeMS;
};
diff --git a/third_party/WebKit/Source/core/fileapi/FileReader.idl b/third_party/WebKit/Source/core/fileapi/FileReader.idl
index f3bb0f1..d44da50 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReader.idl
+++ b/third_party/WebKit/Source/core/fileapi/FileReader.idl
@@ -58,8 +58,8 @@
// File or Blob data
readonly attribute (DOMString or ArrayBuffer)? result;
- // TODO(foolip): error should be DOMError. crbug.com/496901
- [Measure] readonly attribute FileError? error;
+ // TODO(jsbell): Spec has DOMError, which is being deprecated.
+ readonly attribute DOMException? error;
// event handler attributes
attribute EventHandler onloadstart;
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp
index f578e0ae..15937cb 100644
--- a/third_party/WebKit/Source/core/frame/Deprecation.cpp
+++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -179,9 +179,6 @@
case UseCounter::ConsoleMarkTimeline:
return replacedBy("'console.markTimeline'", "'console.timeStamp'");
- case UseCounter::FileError:
- return String::format("'FileError is deprecated and will be removed in %s. Please use the 'name' or 'message' attributes of the error rather than 'code'. See https://www.chromestatus.com/features/6687420359639040 for more details.", milestoneString(54));
-
case UseCounter::CSSStyleSheetInsertRuleOptionalArg:
return "Calling CSSStyleSheet.insertRule() with one argument is deprecated. Please pass the index argument as well: insertRule(x, 0).";
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index b3880fad8..c8417f0 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -139,7 +139,6 @@
NavigatorProductSub = 123,
NavigatorVendor = 124,
NavigatorVendorSub = 125,
- FileError = 126,
PrefixedAnimationEndEvent = 128,
UnprefixedAnimationEndEvent = 129,
PrefixedAndUnprefixedAnimationEndEvent = 130,
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
index d8ad4a8..5fbfa1a 100644
--- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
+++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
@@ -31,6 +31,7 @@
#include "core/imagebitmap/ImageBitmapFactories.h"
#include "bindings/core/v8/ExceptionState.h"
+#include "core/dom/DOMException.h"
#include "core/dom/ExecutionContext.h"
#include "core/fileapi/Blob.h"
#include "core/frame/ImageBitmap.h"
diff --git a/third_party/WebKit/Source/devtools/front_end/devtools.js b/third_party/WebKit/Source/devtools/front_end/devtools.js
index 9618a14..f2a1325 100644
--- a/third_party/WebKit/Source/devtools/front_end/devtools.js
+++ b/third_party/WebKit/Source/devtools/front_end/devtools.js
@@ -1077,6 +1077,7 @@
/**
* @suppressGlobalPropertiesCheck
+ * @suppress {checkTypes}
*/
function installBackwardsCompatibility()
{
@@ -1140,6 +1141,14 @@
// Support for legacy (<M49) frontends.
Event.prototype.deepPath = undefined;
+
+ // Support for legacy (<53) frontends.
+ window.FileError = {
+ NOT_FOUND_ERR: DOMException.NOT_FOUND_ERR,
+ ABORT_ERR: DOMException.ABORT_ERR,
+ INVALID_MODIFICATION_ERR: DOMException.INVALID_MODIFICATION_ERR,
+ NOT_READABLE_ERR: 0 // No matching DOMException, so code will be 0.
+ };
}
function windowLoaded()
diff --git a/third_party/WebKit/Source/devtools/front_end/externs.js b/third_party/WebKit/Source/devtools/front_end/externs.js
index 3efe70a..3d2ac153 100644
--- a/third_party/WebKit/Source/devtools/front_end/externs.js
+++ b/third_party/WebKit/Source/devtools/front_end/externs.js
@@ -757,3 +757,10 @@
/** @type {(string|!Array<!Gonzales.Node>)} */
this.content;
}
+
+/**
+ * @type {string}
+ * @see http://heycam.github.io/webidl/#es-DOMException-prototype-object
+ * TODO(jsbell): DOMException should be a subclass of Error.
+ */
+DOMException.prototype.message;
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineLoader.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineLoader.js
index 4d318ba..96bd1e1 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineLoader.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineLoader.js
@@ -214,14 +214,14 @@
*/
onError: function(reader, event)
{
- switch (event.target.error.code) {
- case FileError.NOT_FOUND_ERR:
+ switch (event.target.error.name) {
+ case 'NotFoundError':
this._reportErrorAndCancelLoading(WebInspector.UIString("File \"%s\" not found.", reader.fileName()));
break;
- case FileError.NOT_READABLE_ERR:
+ case 'NotReadableError':
this._reportErrorAndCancelLoading(WebInspector.UIString("File \"%s\" is not readable", reader.fileName()));
break;
- case FileError.ABORT_ERR:
+ case 'AbortError':
break;
default:
this._reportErrorAndCancelLoading(WebInspector.UIString("An error occurred while reading the file \"%s\"", reader.fileName()));
diff --git a/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystem.js b/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystem.js
index c3983ea..53330eaf 100644
--- a/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystem.js
+++ b/third_party/WebKit/Source/devtools/front_end/workspace/IsolatedFileSystem.js
@@ -96,7 +96,7 @@
}
/**
- * @param {!FileError} error
+ * @param {!DOMException} error
* @return {string}
*/
WebInspector.IsolatedFileSystem.errorMessage = function(error)
@@ -216,7 +216,7 @@
*/
function fileCreationError(error)
{
- if (error.code === FileError.INVALID_MODIFICATION_ERR) {
+ if (error.name === 'InvalidModificationError') {
dirEntryLoaded.call(this, dirEntry);
return;
}
@@ -264,6 +264,8 @@
/**
* @param {!FileError} error
* @this {WebInspector.IsolatedFileSystem}
+ * @suppress {checkTypes}
+ * TODO(jsbell): Update externs replacing FileError with DOMException. https://crbug.com/496901
*/
function errorHandler(error)
{
@@ -322,7 +324,7 @@
*/
function errorHandler(error)
{
- if (error.code === FileError.NOT_FOUND_ERR) {
+ if (error.name === 'NotFoundError') {
callback(null);
return;
}
@@ -436,7 +438,7 @@
*/
function newFileEntryLoadErrorHandler(error)
{
- if (error.code !== FileError.NOT_FOUND_ERR) {
+ if (error.name !== 'NotFoundError') {
callback(false);
return;
}
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp
index ce734f44..79551d0 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp
@@ -33,7 +33,6 @@
#include "core/fileapi/BlobCallback.h"
#include "modules/filesystem/DOMFilePath.h"
#include "modules/filesystem/DirectoryEntry.h"
-#include "modules/filesystem/ErrorCallback.h"
#include "modules/filesystem/FileEntry.h"
#include "modules/filesystem/FileSystemCallbacks.h"
#include "modules/filesystem/FileWriter.h"
@@ -115,15 +114,15 @@
return m_numberOfPendingCallbacks;
}
-void DOMFileSystem::reportError(ErrorCallback* errorCallback, FileError* fileError)
+void DOMFileSystem::reportError(ErrorCallbackBase* errorCallback, FileError::ErrorCode fileError)
{
reportError(getExecutionContext(), errorCallback, fileError);
}
-void DOMFileSystem::reportError(ExecutionContext* executionContext, ErrorCallback* errorCallback, FileError* fileError)
+void DOMFileSystem::reportError(ExecutionContext* executionContext, ErrorCallbackBase* errorCallback, FileError::ErrorCode fileError)
{
if (errorCallback)
- scheduleCallback(executionContext, createSameThreadTask(&ErrorCallback::handleEvent, wrapPersistent(errorCallback), wrapPersistent(fileError)));
+ scheduleCallback(executionContext, createSameThreadTask(&ErrorCallbackBase::invoke, wrapPersistent(errorCallback), fileError));
}
namespace {
@@ -155,12 +154,12 @@
} // namespace
-void DOMFileSystem::createWriter(const FileEntry* fileEntry, FileWriterCallback* successCallback, ErrorCallback* errorCallback)
+void DOMFileSystem::createWriter(const FileEntry* fileEntry, FileWriterCallback* successCallback, ErrorCallbackBase* errorCallback)
{
ASSERT(fileEntry);
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
@@ -170,11 +169,11 @@
fileSystem()->createFileWriter(createFileSystemURL(fileEntry), fileWriter, std::move(callbacks));
}
-void DOMFileSystem::createFile(const FileEntry* fileEntry, BlobCallback* successCallback, ErrorCallback* errorCallback)
+void DOMFileSystem::createFile(const FileEntry* fileEntry, BlobCallback* successCallback, ErrorCallbackBase* errorCallback)
{
KURL fileSystemURL = createFileSystemURL(fileEntry);
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.h b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.h
index 4f40348..9d74798c 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.h
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.h
@@ -64,15 +64,15 @@
// DOMFileSystemBase overrides.
void addPendingCallbacks() override;
void removePendingCallbacks() override;
- void reportError(ErrorCallback*, FileError*) override;
+ void reportError(ErrorCallbackBase*, FileError::ErrorCode) override;
- static void reportError(ExecutionContext*, ErrorCallback*, FileError*);
+ static void reportError(ExecutionContext*, ErrorCallbackBase*, FileError::ErrorCode);
// ActiveScriptWrappable overrides.
bool hasPendingActivity() const final;
- void createWriter(const FileEntry*, FileWriterCallback*, ErrorCallback*);
- void createFile(const FileEntry*, BlobCallback*, ErrorCallback*);
+ void createWriter(const FileEntry*, FileWriterCallback*, ErrorCallbackBase*);
+ void createFile(const FileEntry*, BlobCallback*, ErrorCallbackBase*);
// Schedule a callback. This should not cross threads (should be called on the same context thread).
static void scheduleCallback(ExecutionContext* executionContext, std::unique_ptr<ExecutionContextTask> task)
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp
index 02cf027..f2c280e 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp
@@ -41,7 +41,6 @@
#include "modules/filesystem/Entry.h"
#include "modules/filesystem/EntryBase.h"
#include "modules/filesystem/EntryCallback.h"
-#include "modules/filesystem/ErrorCallback.h"
#include "modules/filesystem/FileSystemCallbacks.h"
#include "modules/filesystem/MetadataCallback.h"
#include "platform/weborigin/SecurityOrigin.h"
@@ -215,10 +214,10 @@
}
}
-void DOMFileSystemBase::getMetadata(const EntryBase* entry, MetadataCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::getMetadata(const EntryBase* entry, MetadataCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
@@ -256,16 +255,16 @@
return true;
}
-void DOMFileSystemBase::move(const EntryBase* source, EntryBase* parent, const String& newName, EntryCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::move(const EntryBase* source, EntryBase* parent, const String& newName, EntryCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
String destinationPath;
if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, destinationPath)) {
- reportError(errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ reportError(errorCallback, FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -275,16 +274,16 @@
fileSystem()->move(createFileSystemURL(source), parent->filesystem()->createFileSystemURL(destinationPath), std::move(callbacks));
}
-void DOMFileSystemBase::copy(const EntryBase* source, EntryBase* parent, const String& newName, EntryCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::copy(const EntryBase* source, EntryBase* parent, const String& newName, EntryCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
String destinationPath;
if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, destinationPath)) {
- reportError(errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ reportError(errorCallback, FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -294,17 +293,17 @@
fileSystem()->copy(createFileSystemURL(source), parent->filesystem()->createFileSystemURL(destinationPath), std::move(callbacks));
}
-void DOMFileSystemBase::remove(const EntryBase* entry, VoidCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::remove(const EntryBase* entry, VoidCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
ASSERT(entry);
// We don't allow calling remove() on the root directory.
if (entry->fullPath() == String(DOMFilePath::root)) {
- reportError(errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ reportError(errorCallback, FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -314,17 +313,17 @@
fileSystem()->remove(createFileSystemURL(entry), std::move(callbacks));
}
-void DOMFileSystemBase::removeRecursively(const EntryBase* entry, VoidCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::removeRecursively(const EntryBase* entry, VoidCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
ASSERT(entry && entry->isDirectory());
// We don't allow calling remove() on the root directory.
if (entry->fullPath() == String(DOMFilePath::root)) {
- reportError(errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ reportError(errorCallback, FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -334,10 +333,10 @@
fileSystem()->removeRecursively(createFileSystemURL(entry), std::move(callbacks));
}
-void DOMFileSystemBase::getParent(const EntryBase* entry, EntryCallback* successCallback, ErrorCallback* errorCallback)
+void DOMFileSystemBase::getParent(const EntryBase* entry, EntryCallback* successCallback, ErrorCallbackBase* errorCallback)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
@@ -347,16 +346,16 @@
fileSystem()->directoryExists(createFileSystemURL(path), EntryCallbacks::create(successCallback, errorCallback, m_context, this, path, true));
}
-void DOMFileSystemBase::getFile(const EntryBase* entry, const String& path, const FileSystemFlags& flags, EntryCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::getFile(const EntryBase* entry, const String& path, const FileSystemFlags& flags, EntryCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
String absolutePath;
if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) {
- reportError(errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ reportError(errorCallback, FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -369,16 +368,16 @@
fileSystem()->fileExists(createFileSystemURL(absolutePath), std::move(callbacks));
}
-void DOMFileSystemBase::getDirectory(const EntryBase* entry, const String& path, const FileSystemFlags& flags, EntryCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+void DOMFileSystemBase::getDirectory(const EntryBase* entry, const String& path, const FileSystemFlags& flags, EntryCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return;
}
String absolutePath;
if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) {
- reportError(errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ reportError(errorCallback, FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -391,10 +390,10 @@
fileSystem()->directoryExists(createFileSystemURL(absolutePath), std::move(callbacks));
}
-int DOMFileSystemBase::readDirectory(DirectoryReaderBase* reader, const String& path, EntriesCallback* successCallback, ErrorCallback* errorCallback, SynchronousType synchronousType)
+int DOMFileSystemBase::readDirectory(DirectoryReaderBase* reader, const String& path, EntriesCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType)
{
if (!fileSystem()) {
- reportError(errorCallback, FileError::create(FileError::ABORT_ERR));
+ reportError(errorCallback, FileError::ABORT_ERR);
return 0;
}
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.h b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.h
index 5473f5d2..4fe751b 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.h
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.h
@@ -31,6 +31,7 @@
#ifndef DOMFileSystemBase_h
#define DOMFileSystemBase_h
+#include "core/fileapi/FileError.h"
#include "modules/ModulesExport.h"
#include "modules/filesystem/FileSystemFlags.h"
#include "platform/FileSystemType.h"
@@ -48,9 +49,8 @@
class EntriesCallback;
class EntryBase;
class EntryCallback;
-class ErrorCallback;
+class ErrorCallbackBase;
class File;
-class FileError;
class FileMetadata;
class MetadataCallback;
class ExecutionContext;
@@ -81,7 +81,7 @@
virtual void removePendingCallbacks() { }
// Overridden by subclasses to handle sync vs async error-handling.
- virtual void reportError(ErrorCallback*, FileError*) = 0;
+ virtual void reportError(ErrorCallbackBase*, FileError::ErrorCode) = 0;
const String& name() const { return m_name; }
FileSystemType type() const { return m_type; }
@@ -106,15 +106,15 @@
static File* createFile(const FileMetadata&, const KURL& fileSystemURL, FileSystemType, const String name);
// Actual FileSystem API implementations. All the validity checks on virtual paths are done at this level.
- void getMetadata(const EntryBase*, MetadataCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- void move(const EntryBase* source, EntryBase* parent, const String& name, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- void copy(const EntryBase* source, EntryBase* parent, const String& name, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- void remove(const EntryBase*, VoidCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- void removeRecursively(const EntryBase*, VoidCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- void getParent(const EntryBase*, EntryCallback*, ErrorCallback*);
- void getFile(const EntryBase*, const String& path, const FileSystemFlags&, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- void getDirectory(const EntryBase*, const String& path, const FileSystemFlags&, EntryCallback*, ErrorCallback*, SynchronousType = Asynchronous);
- int readDirectory(DirectoryReaderBase*, const String& path, EntriesCallback*, ErrorCallback*, SynchronousType = Asynchronous);
+ void getMetadata(const EntryBase*, MetadataCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ void move(const EntryBase* source, EntryBase* parent, const String& name, EntryCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ void copy(const EntryBase* source, EntryBase* parent, const String& name, EntryCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ void remove(const EntryBase*, VoidCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ void removeRecursively(const EntryBase*, VoidCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ void getParent(const EntryBase*, EntryCallback*, ErrorCallbackBase*);
+ void getFile(const EntryBase*, const String& path, const FileSystemFlags&, EntryCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ void getDirectory(const EntryBase*, const String& path, const FileSystemFlags&, EntryCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
+ int readDirectory(DirectoryReaderBase*, const String& path, EntriesCallback*, ErrorCallbackBase*, SynchronousType = Asynchronous);
bool waitForAdditionalResult(int callbacksId);
DECLARE_VIRTUAL_TRACE();
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp
index e57da4d..59c2136 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp
@@ -65,9 +65,9 @@
{
}
-void DOMFileSystemSync::reportError(ErrorCallback* errorCallback, FileError* fileError)
+void DOMFileSystemSync::reportError(ErrorCallbackBase* errorCallback, FileError::ErrorCode fileError)
{
- errorCallback->handleEvent(fileError);
+ errorCallback->invoke(fileError);
}
DirectoryEntrySync* DOMFileSystemSync::root()
@@ -181,17 +181,17 @@
}
};
-class LocalErrorCallback final : public ErrorCallback {
+class LocalErrorCallback final : public ErrorCallbackBase {
public:
static LocalErrorCallback* create(FileError::ErrorCode& errorCode)
{
return new LocalErrorCallback(errorCode);
}
- void handleEvent(FileError* error) override
+ void invoke(FileError::ErrorCode error) override
{
- ASSERT(error->code() != FileError::OK);
- m_errorCode = error->code();
+ DCHECK_NE(error, FileError::OK);
+ m_errorCode = error;
}
private:
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.h b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.h
index 4e59b33..de921b2 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.h
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.h
@@ -55,7 +55,7 @@
~DOMFileSystemSync() override;
- void reportError(ErrorCallback*, FileError*) override;
+ void reportError(ErrorCallbackBase*, FileError::ErrorCode) override;
DirectoryEntrySync* root();
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp b/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp
index 5eee230..fcfb42f 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMWindowFileSystem.cpp
@@ -55,17 +55,17 @@
UseCounter::count(document, UseCounter::RequestFileSystemNonWebbyOrigin);
if (!document->getSecurityOrigin()->canAccessFileSystem()) {
- DOMFileSystem::reportError(document, errorCallback, FileError::create(FileError::SECURITY_ERR));
+ DOMFileSystem::reportError(document, ScriptErrorCallback::wrap(errorCallback), FileError::SECURITY_ERR);
return;
}
FileSystemType fileSystemType = static_cast<FileSystemType>(type);
if (!DOMFileSystemBase::isValidType(fileSystemType)) {
- DOMFileSystem::reportError(document, errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ DOMFileSystem::reportError(document, ScriptErrorCallback::wrap(errorCallback), FileError::INVALID_MODIFICATION_ERR);
return;
}
- LocalFileSystem::from(*document)->requestFileSystem(document, fileSystemType, size, FileSystemCallbacks::create(successCallback, errorCallback, document, fileSystemType));
+ LocalFileSystem::from(*document)->requestFileSystem(document, fileSystemType, size, FileSystemCallbacks::create(successCallback, ScriptErrorCallback::wrap(errorCallback), document, fileSystemType));
}
void DOMWindowFileSystem::webkitResolveLocalFileSystemURL(DOMWindow& windowArg, const String& url, EntryCallback* successCallback, ErrorCallback* errorCallback)
@@ -81,16 +81,16 @@
SecurityOrigin* securityOrigin = document->getSecurityOrigin();
KURL completedURL = document->completeURL(url);
if (!securityOrigin->canAccessFileSystem() || !securityOrigin->canRequest(completedURL)) {
- DOMFileSystem::reportError(document, errorCallback, FileError::create(FileError::SECURITY_ERR));
+ DOMFileSystem::reportError(document, ScriptErrorCallback::wrap(errorCallback), FileError::SECURITY_ERR);
return;
}
if (!completedURL.isValid()) {
- DOMFileSystem::reportError(document, errorCallback, FileError::create(FileError::ENCODING_ERR));
+ DOMFileSystem::reportError(document, ScriptErrorCallback::wrap(errorCallback), FileError::ENCODING_ERR);
return;
}
- LocalFileSystem::from(*document)->resolveURL(document, completedURL, ResolveURICallbacks::create(successCallback, errorCallback, document));
+ LocalFileSystem::from(*document)->resolveURL(document, completedURL, ResolveURICallbacks::create(successCallback, ScriptErrorCallback::wrap(errorCallback), document));
}
static_assert(static_cast<int>(DOMWindowFileSystem::TEMPORARY) == static_cast<int>(FileSystemTypeTemporary), "DOMWindowFileSystem::TEMPORARY should match FileSystemTypeTemporary");
diff --git a/third_party/WebKit/Source/modules/filesystem/DirectoryEntry.cpp b/third_party/WebKit/Source/modules/filesystem/DirectoryEntry.cpp
index b3a274d..983474c3 100644
--- a/third_party/WebKit/Source/modules/filesystem/DirectoryEntry.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DirectoryEntry.cpp
@@ -35,6 +35,7 @@
#include "modules/filesystem/DirectoryReader.h"
#include "modules/filesystem/EntryCallback.h"
#include "modules/filesystem/ErrorCallback.h"
+#include "modules/filesystem/FileSystemCallbacks.h"
#include "modules/filesystem/FileSystemFlags.h"
namespace blink {
@@ -51,17 +52,17 @@
void DirectoryEntry::getFile(const String& path, const FileSystemFlags& options, EntryCallback* successCallback, ErrorCallback* errorCallback)
{
- m_fileSystem->getFile(this, path, options, successCallback, errorCallback);
+ m_fileSystem->getFile(this, path, options, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void DirectoryEntry::getDirectory(const String& path, const FileSystemFlags& options, EntryCallback* successCallback, ErrorCallback* errorCallback)
{
- m_fileSystem->getDirectory(this, path, options, successCallback, errorCallback);
+ m_fileSystem->getDirectory(this, path, options, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void DirectoryEntry::removeRecursively(VoidCallback* successCallback, ErrorCallback* errorCallback) const
{
- m_fileSystem->removeRecursively(this, successCallback, errorCallback);
+ m_fileSystem->removeRecursively(this, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
DEFINE_TRACE(DirectoryEntry)
diff --git a/third_party/WebKit/Source/modules/filesystem/DirectoryReader.cpp b/third_party/WebKit/Source/modules/filesystem/DirectoryReader.cpp
index cda4d57..d3627f3f 100644
--- a/third_party/WebKit/Source/modules/filesystem/DirectoryReader.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DirectoryReader.cpp
@@ -34,6 +34,7 @@
#include "modules/filesystem/EntriesCallback.h"
#include "modules/filesystem/Entry.h"
#include "modules/filesystem/ErrorCallback.h"
+#include "modules/filesystem/FileSystemCallbacks.h"
namespace blink {
@@ -60,14 +61,14 @@
Member<DirectoryReader> m_reader;
};
-class DirectoryReader::ErrorCallbackHelper final : public ErrorCallback {
+class DirectoryReader::ErrorCallbackHelper final : public ErrorCallbackBase {
public:
explicit ErrorCallbackHelper(DirectoryReader* reader)
: m_reader(reader)
{
}
- void handleEvent(FileError* error) override
+ void invoke(FileError::ErrorCode error) override
{
m_reader->onError(error);
}
@@ -75,7 +76,7 @@
DEFINE_INLINE_VIRTUAL_TRACE()
{
visitor->trace(m_reader);
- ErrorCallback::trace(visitor);
+ ErrorCallbackBase::trace(visitor);
}
private:
@@ -100,13 +101,13 @@
}
if (m_error) {
- filesystem()->reportError(errorCallback, m_error.get());
+ filesystem()->reportError(ScriptErrorCallback::wrap(errorCallback), m_error);
return;
}
if (m_entriesCallback) {
// Non-null m_entriesCallback means multiple readEntries() calls are made concurrently. We don't allow doing it.
- filesystem()->reportError(errorCallback, FileError::create(FileError::INVALID_STATE_ERR));
+ filesystem()->reportError(ScriptErrorCallback::wrap(errorCallback), FileError::INVALID_STATE_ERR);
return;
}
@@ -133,20 +134,17 @@
}
}
-void DirectoryReader::onError(FileError* error)
+void DirectoryReader::onError(FileError::ErrorCode error)
{
m_error = error;
m_entriesCallback = nullptr;
- if (m_errorCallback) {
- ErrorCallback* errorCallback = m_errorCallback.release();
- errorCallback->handleEvent(error);
- }
+ if (m_errorCallback)
+ m_errorCallback->handleEvent(FileError::createDOMException(error));
}
DEFINE_TRACE(DirectoryReader)
{
visitor->trace(m_entries);
- visitor->trace(m_error);
visitor->trace(m_entriesCallback);
visitor->trace(m_errorCallback);
DirectoryReaderBase::trace(visitor);
diff --git a/third_party/WebKit/Source/modules/filesystem/DirectoryReader.h b/third_party/WebKit/Source/modules/filesystem/DirectoryReader.h
index 45d8b1ba..7eb8107d 100644
--- a/third_party/WebKit/Source/modules/filesystem/DirectoryReader.h
+++ b/third_party/WebKit/Source/modules/filesystem/DirectoryReader.h
@@ -66,11 +66,11 @@
void addEntries(const EntryHeapVector& entries);
- void onError(FileError*);
+ void onError(FileError::ErrorCode);
bool m_isReading;
EntryHeapVector m_entries;
- Member<FileError> m_error;
+ FileError::ErrorCode m_error = FileError::ErrorCode::OK;
Member<EntriesCallback> m_entriesCallback;
Member<ErrorCallback> m_errorCallback;
};
diff --git a/third_party/WebKit/Source/modules/filesystem/DirectoryReaderSync.cpp b/third_party/WebKit/Source/modules/filesystem/DirectoryReaderSync.cpp
index 6fcb188..c1652f1 100644
--- a/third_party/WebKit/Source/modules/filesystem/DirectoryReaderSync.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DirectoryReaderSync.cpp
@@ -37,6 +37,7 @@
#include "modules/filesystem/EntrySync.h"
#include "modules/filesystem/ErrorCallback.h"
#include "modules/filesystem/FileEntrySync.h"
+#include "modules/filesystem/FileSystemCallbacks.h"
namespace blink {
@@ -66,22 +67,22 @@
Member<DirectoryReaderSync> m_reader;
};
-class DirectoryReaderSync::ErrorCallbackHelper final : public ErrorCallback {
+class DirectoryReaderSync::ErrorCallbackHelper final : public ErrorCallbackBase {
public:
explicit ErrorCallbackHelper(DirectoryReaderSync* reader)
: m_reader(reader)
{
}
- void handleEvent(FileError* error) override
+ void invoke(FileError::ErrorCode error) override
{
- m_reader->setError(error->code());
+ m_reader->setError(error);
}
DEFINE_INLINE_VIRTUAL_TRACE()
{
visitor->trace(m_reader);
- ErrorCallback::trace(visitor);
+ ErrorCallbackBase::trace(visitor);
}
private:
diff --git a/third_party/WebKit/Source/modules/filesystem/Entry.cpp b/third_party/WebKit/Source/modules/filesystem/Entry.cpp
index 159bc40..32b5f80 100644
--- a/third_party/WebKit/Source/modules/filesystem/Entry.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/Entry.cpp
@@ -59,35 +59,35 @@
{
if (m_fileSystem->type() == FileSystemTypeIsolated)
UseCounter::count(context, UseCounter::Entry_GetMetadata_Method_IsolatedFileSystem);
- m_fileSystem->getMetadata(this, successCallback, errorCallback);
+ m_fileSystem->getMetadata(this, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void Entry::moveTo(ExecutionContext* context, DirectoryEntry* parent, const String& name, EntryCallback* successCallback, ErrorCallback* errorCallback) const
{
if (m_fileSystem->type() == FileSystemTypeIsolated)
UseCounter::count(context, UseCounter::Entry_MoveTo_Method_IsolatedFileSystem);
- m_fileSystem->move(this, parent, name, successCallback, errorCallback);
+ m_fileSystem->move(this, parent, name, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void Entry::copyTo(ExecutionContext* context, DirectoryEntry* parent, const String& name, EntryCallback* successCallback, ErrorCallback* errorCallback) const
{
if (m_fileSystem->type() == FileSystemTypeIsolated)
UseCounter::count(context, UseCounter::Entry_CopyTo_Method_IsolatedFileSystem);
- m_fileSystem->copy(this, parent, name, successCallback, errorCallback);
+ m_fileSystem->copy(this, parent, name, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void Entry::remove(ExecutionContext* context, VoidCallback* successCallback, ErrorCallback* errorCallback) const
{
if (m_fileSystem->type() == FileSystemTypeIsolated)
UseCounter::count(context, UseCounter::Entry_Remove_Method_IsolatedFileSystem);
- m_fileSystem->remove(this, successCallback, errorCallback);
+ m_fileSystem->remove(this, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void Entry::getParent(ExecutionContext* context, EntryCallback* successCallback, ErrorCallback* errorCallback) const
{
if (m_fileSystem->type() == FileSystemTypeIsolated)
UseCounter::count(context, UseCounter::Entry_GetParent_Method_IsolatedFileSystem);
- m_fileSystem->getParent(this, successCallback, errorCallback);
+ m_fileSystem->getParent(this, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
String Entry::toURL(ExecutionContext* context) const
diff --git a/third_party/WebKit/Source/modules/filesystem/ErrorCallback.h b/third_party/WebKit/Source/modules/filesystem/ErrorCallback.h
index 655b495..3c05cec 100644
--- a/third_party/WebKit/Source/modules/filesystem/ErrorCallback.h
+++ b/third_party/WebKit/Source/modules/filesystem/ErrorCallback.h
@@ -35,13 +35,11 @@
namespace blink {
-class FileError;
-
class ErrorCallback : public GarbageCollectedFinalized<ErrorCallback> {
public:
virtual ~ErrorCallback() { }
DEFINE_INLINE_VIRTUAL_TRACE() { }
- virtual void handleEvent(FileError*) = 0;
+ virtual void handleEvent(DOMException*) = 0;
};
} // namespace blink
diff --git a/third_party/WebKit/Source/modules/filesystem/ErrorCallback.idl b/third_party/WebKit/Source/modules/filesystem/ErrorCallback.idl
index 8f05cf4..991c587 100644
--- a/third_party/WebKit/Source/modules/filesystem/ErrorCallback.idl
+++ b/third_party/WebKit/Source/modules/filesystem/ErrorCallback.idl
@@ -29,5 +29,5 @@
*/
callback interface ErrorCallback {
- void handleEvent(FileError error);
+ void handleEvent(DOMException error);
};
diff --git a/third_party/WebKit/Source/modules/filesystem/FileEntry.cpp b/third_party/WebKit/Source/modules/filesystem/FileEntry.cpp
index 503fa95..ff1f2e2 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileEntry.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/FileEntry.cpp
@@ -34,6 +34,7 @@
#include "core/fileapi/File.h"
#include "modules/filesystem/DOMFileSystem.h"
#include "modules/filesystem/ErrorCallback.h"
+#include "modules/filesystem/FileSystemCallbacks.h"
#include "modules/filesystem/FileWriterCallback.h"
namespace blink {
@@ -45,12 +46,12 @@
void FileEntry::createWriter(FileWriterCallback* successCallback, ErrorCallback* errorCallback)
{
- filesystem()->createWriter(this, successCallback, errorCallback);
+ filesystem()->createWriter(this, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
void FileEntry::file(BlobCallback* successCallback, ErrorCallback* errorCallback)
{
- filesystem()->createFile(this, successCallback, errorCallback);
+ filesystem()->createFile(this, successCallback, ScriptErrorCallback::wrap(errorCallback));
}
DEFINE_TRACE(FileEntry)
diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
index d4c1a04..133ec39f 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
@@ -56,7 +56,7 @@
namespace blink {
-FileSystemCallbacksBase::FileSystemCallbacksBase(ErrorCallback* errorCallback, DOMFileSystemBase* fileSystem, ExecutionContext* context)
+FileSystemCallbacksBase::FileSystemCallbacksBase(ErrorCallbackBase* errorCallback, DOMFileSystemBase* fileSystem, ExecutionContext* context)
: m_errorCallback(errorCallback)
, m_fileSystem(fileSystem)
, m_executionContext(context)
@@ -74,7 +74,7 @@
void FileSystemCallbacksBase::didFail(int code)
{
if (m_errorCallback)
- handleEventOrScheduleCallback(m_errorCallback.release(), FileError::create(static_cast<FileError::ErrorCode>(code)));
+ invokeOrScheduleCallback(m_errorCallback.release(), static_cast<FileError::ErrorCode>(code));
}
bool FileSystemCallbacksBase::shouldScheduleCallback() const
@@ -83,9 +83,22 @@
}
template <typename CB, typename CBArg>
+void FileSystemCallbacksBase::invokeOrScheduleCallback(CB* callback, CBArg arg)
+{
+ DCHECK(callback);
+ if (callback) {
+ if (shouldScheduleCallback())
+ DOMFileSystem::scheduleCallback(m_executionContext.get(), createSameThreadTask(&CB::invoke, wrapPersistent(callback), arg));
+ else
+ callback->invoke(arg);
+ }
+ m_executionContext.clear();
+}
+
+template <typename CB, typename CBArg>
void FileSystemCallbacksBase::handleEventOrScheduleCallback(CB* callback, CBArg* arg)
{
- ASSERT(callback);
+ DCHECK(callback);
if (callback) {
if (shouldScheduleCallback())
DOMFileSystem::scheduleCallback(m_executionContext.get(), createSameThreadTask(&CB::handleEvent, wrapPersistent(callback), wrapPersistent(arg)));
@@ -98,7 +111,7 @@
template <typename CB>
void FileSystemCallbacksBase::handleEventOrScheduleCallback(CB* callback)
{
- ASSERT(callback);
+ DCHECK(callback);
if (callback) {
if (shouldScheduleCallback())
DOMFileSystem::scheduleCallback(m_executionContext.get(), createSameThreadTask(&CB::handleEvent, wrapPersistent(callback)));
@@ -108,14 +121,43 @@
m_executionContext.clear();
}
+// ScriptErrorCallback --------------------------------------------------------
+
+// static
+ScriptErrorCallback* ScriptErrorCallback::wrap(ErrorCallback* callback)
+{
+ // DOMFileSystem operations take an optional (nullable) callback. If a
+ // script callback was not passed, don't bother creating a dummy wrapper
+ // and checking during invoke().
+ if (!callback)
+ return nullptr;
+ return new ScriptErrorCallback(callback);
+}
+
+DEFINE_TRACE(ScriptErrorCallback)
+{
+ ErrorCallbackBase::trace(visitor);
+ visitor->trace(m_callback);
+}
+
+void ScriptErrorCallback::invoke(FileError::ErrorCode error)
+{
+ m_callback->handleEvent(FileError::createDOMException(error));
+};
+
+ScriptErrorCallback::ScriptErrorCallback(ErrorCallback* callback)
+ : m_callback(callback)
+{
+}
+
// EntryCallbacks -------------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> EntryCallbacks::create(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
+std::unique_ptr<AsyncFileSystemCallbacks> EntryCallbacks::create(EntryCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
{
return wrapUnique(new EntryCallbacks(successCallback, errorCallback, context, fileSystem, expectedPath, isDirectory));
}
-EntryCallbacks::EntryCallbacks(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
+EntryCallbacks::EntryCallbacks(EntryCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
: FileSystemCallbacksBase(errorCallback, fileSystem, context)
, m_successCallback(successCallback)
, m_expectedPath(expectedPath)
@@ -135,12 +177,12 @@
// EntriesCallbacks -----------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> EntriesCallbacks::create(EntriesCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
+std::unique_ptr<AsyncFileSystemCallbacks> EntriesCallbacks::create(EntriesCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
{
return wrapUnique(new EntriesCallbacks(successCallback, errorCallback, context, directoryReader, basePath));
}
-EntriesCallbacks::EntriesCallbacks(EntriesCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
+EntriesCallbacks::EntriesCallbacks(EntriesCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
: FileSystemCallbacksBase(errorCallback, directoryReader->filesystem(), context)
, m_successCallback(successCallback)
, m_directoryReader(directoryReader)
@@ -169,12 +211,12 @@
// FileSystemCallbacks --------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(FileSystemCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, FileSystemType type)
+std::unique_ptr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(FileSystemCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, FileSystemType type)
{
return wrapUnique(new FileSystemCallbacks(successCallback, errorCallback, context, type));
}
-FileSystemCallbacks::FileSystemCallbacks(FileSystemCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, FileSystemType type)
+FileSystemCallbacks::FileSystemCallbacks(FileSystemCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, FileSystemType type)
: FileSystemCallbacksBase(errorCallback, nullptr, context)
, m_successCallback(successCallback)
, m_type(type)
@@ -189,12 +231,12 @@
// ResolveURICallbacks --------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+std::unique_ptr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(EntryCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context)
{
return wrapUnique(new ResolveURICallbacks(successCallback, errorCallback, context));
}
-ResolveURICallbacks::ResolveURICallbacks(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+ResolveURICallbacks::ResolveURICallbacks(EntryCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context)
: FileSystemCallbacksBase(errorCallback, nullptr, context)
, m_successCallback(successCallback)
{
@@ -207,7 +249,7 @@
String absolutePath;
if (!DOMFileSystemBase::pathToAbsolutePath(type, root, filePath, absolutePath)) {
- handleEventOrScheduleCallback(m_errorCallback.release(), FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ invokeOrScheduleCallback(m_errorCallback.release(), FileError::INVALID_MODIFICATION_ERR);
return;
}
@@ -219,12 +261,12 @@
// MetadataCallbacks ----------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> MetadataCallbacks::create(MetadataCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
+std::unique_ptr<AsyncFileSystemCallbacks> MetadataCallbacks::create(MetadataCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
{
return wrapUnique(new MetadataCallbacks(successCallback, errorCallback, context, fileSystem));
}
-MetadataCallbacks::MetadataCallbacks(MetadataCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
+MetadataCallbacks::MetadataCallbacks(MetadataCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
: FileSystemCallbacksBase(errorCallback, fileSystem, context)
, m_successCallback(successCallback)
{
@@ -238,12 +280,12 @@
// FileWriterBaseCallbacks ----------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+std::unique_ptr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context)
{
return wrapUnique(new FileWriterBaseCallbacks(fileWriter, successCallback, errorCallback, context));
}
-FileWriterBaseCallbacks::FileWriterBaseCallbacks(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+FileWriterBaseCallbacks::FileWriterBaseCallbacks(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context)
: FileSystemCallbacksBase(errorCallback, nullptr, context)
, m_fileWriter(fileWriter)
, m_successCallback(successCallback)
@@ -259,12 +301,12 @@
// SnapshotFileCallback -------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+std::unique_ptr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context)
{
return wrapUnique(new SnapshotFileCallback(filesystem, name, url, successCallback, errorCallback, context));
}
-SnapshotFileCallback::SnapshotFileCallback(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+SnapshotFileCallback::SnapshotFileCallback(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context)
: FileSystemCallbacksBase(errorCallback, filesystem, context)
, m_name(name)
, m_url(url)
@@ -287,12 +329,12 @@
// VoidCallbacks --------------------------------------------------------------
-std::unique_ptr<AsyncFileSystemCallbacks> VoidCallbacks::create(VoidCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
+std::unique_ptr<AsyncFileSystemCallbacks> VoidCallbacks::create(VoidCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
{
return wrapUnique(new VoidCallbacks(successCallback, errorCallback, context, fileSystem));
}
-VoidCallbacks::VoidCallbacks(VoidCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
+VoidCallbacks::VoidCallbacks(VoidCallback* successCallback, ErrorCallbackBase* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
: FileSystemCallbacksBase(errorCallback, fileSystem, context)
, m_successCallback(successCallback)
{
diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
index 937f0573..39a169c1 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
+++ b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
@@ -31,6 +31,7 @@
#ifndef FileSystemCallbacks_h
#define FileSystemCallbacks_h
+#include "core/fileapi/FileError.h"
#include "modules/filesystem/EntriesCallback.h"
#include "platform/AsyncFileSystemCallbacks.h"
#include "platform/FileSystemType.h"
@@ -42,10 +43,10 @@
class DOMFileSystemBase;
class DirectoryReaderBase;
+class BlobCallback;
class EntriesCallback;
class EntryCallback;
class ErrorCallback;
-class BlobCallback;
class FileMetadata;
class FileSystemCallback;
class FileWriterBase;
@@ -54,6 +55,16 @@
class ExecutionContext;
class VoidCallback;
+// Passed to DOMFileSystem implementations that may report errors. Subclasses
+// may capture the error for throwing on return to script (for synchronous APIs)
+// or call an actual script callback (for asynchronous APIs).
+class ErrorCallbackBase : public GarbageCollectedFinalized<ErrorCallbackBase> {
+public:
+ virtual ~ErrorCallbackBase() { }
+ DEFINE_INLINE_VIRTUAL_TRACE() { }
+ virtual void invoke(FileError::ErrorCode) = 0;
+};
+
class FileSystemCallbacksBase : public AsyncFileSystemCallbacks {
public:
~FileSystemCallbacksBase() override;
@@ -64,17 +75,20 @@
// Other callback methods are implemented by each subclass.
protected:
- FileSystemCallbacksBase(ErrorCallback*, DOMFileSystemBase*, ExecutionContext*);
+ FileSystemCallbacksBase(ErrorCallbackBase*, DOMFileSystemBase*, ExecutionContext*);
bool shouldScheduleCallback() const;
template <typename CB, typename CBArg>
+ void invokeOrScheduleCallback(CB*, CBArg);
+
+ template <typename CB, typename CBArg>
void handleEventOrScheduleCallback(CB*, CBArg*);
template <typename CB>
void handleEventOrScheduleCallback(CB*);
- Persistent<ErrorCallback> m_errorCallback;
+ Persistent<ErrorCallbackBase> m_errorCallback;
Persistent<DOMFileSystemBase> m_fileSystem;
Persistent<ExecutionContext> m_executionContext;
int m_asyncOperationId;
@@ -82,13 +96,26 @@
// Subclasses ----------------------------------------------------------------
+// Wraps a script-provided callback for use in DOMFileSystem operations.
+class ScriptErrorCallback final : public ErrorCallbackBase {
+public:
+ static ScriptErrorCallback* wrap(ErrorCallback*);
+ virtual ~ScriptErrorCallback() { }
+ DECLARE_VIRTUAL_TRACE();
+
+ void invoke(FileError::ErrorCode) override;
+private:
+ explicit ScriptErrorCallback(ErrorCallback*);
+ Member<ErrorCallback> m_callback;
+};
+
class EntryCallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
void didSucceed() override;
private:
- EntryCallbacks(EntryCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
+ EntryCallbacks(EntryCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
Persistent<EntryCallback> m_successCallback;
String m_expectedPath;
bool m_isDirectory;
@@ -96,12 +123,12 @@
class EntriesCallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(EntriesCallback*, ErrorCallback*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(EntriesCallback*, ErrorCallbackBase*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
void didReadDirectoryEntry(const String& name, bool isDirectory) override;
void didReadDirectoryEntries(bool hasMore) override;
private:
- EntriesCallbacks(EntriesCallback*, ErrorCallback*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
+ EntriesCallbacks(EntriesCallback*, ErrorCallbackBase*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
Persistent<EntriesCallback> m_successCallback;
Persistent<DirectoryReaderBase> m_directoryReader;
String m_basePath;
@@ -110,53 +137,53 @@
class FileSystemCallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(FileSystemCallback*, ErrorCallback*, ExecutionContext*, FileSystemType);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(FileSystemCallback*, ErrorCallbackBase*, ExecutionContext*, FileSystemType);
void didOpenFileSystem(const String& name, const KURL& rootURL) override;
private:
- FileSystemCallbacks(FileSystemCallback*, ErrorCallback*, ExecutionContext*, FileSystemType);
+ FileSystemCallbacks(FileSystemCallback*, ErrorCallbackBase*, ExecutionContext*, FileSystemType);
Persistent<FileSystemCallback> m_successCallback;
FileSystemType m_type;
};
class ResolveURICallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallbackBase*, ExecutionContext*);
void didResolveURL(const String& name, const KURL& rootURL, FileSystemType, const String& filePath, bool isDirectry) override;
private:
- ResolveURICallbacks(EntryCallback*, ErrorCallback*, ExecutionContext*);
+ ResolveURICallbacks(EntryCallback*, ErrorCallbackBase*, ExecutionContext*);
Persistent<EntryCallback> m_successCallback;
};
class MetadataCallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(MetadataCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(MetadataCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
void didReadMetadata(const FileMetadata&) override;
private:
- MetadataCallbacks(MetadataCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
+ MetadataCallbacks(MetadataCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
Persistent<MetadataCallback> m_successCallback;
};
class FileWriterBaseCallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(FileWriterBase*, FileWriterBaseCallback*, ErrorCallbackBase*, ExecutionContext*);
void didCreateFileWriter(std::unique_ptr<WebFileWriter>, long long length) override;
private:
- FileWriterBaseCallbacks(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
+ FileWriterBaseCallbacks(FileWriterBase*, FileWriterBaseCallback*, ErrorCallbackBase*, ExecutionContext*);
Persistent<FileWriterBase> m_fileWriter;
Persistent<FileWriterBaseCallback> m_successCallback;
};
class SnapshotFileCallback final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallback*, ExecutionContext*);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallbackBase*, ExecutionContext*);
virtual void didCreateSnapshotFile(const FileMetadata&, PassRefPtr<BlobDataHandle> snapshot);
private:
- SnapshotFileCallback(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallback*, ExecutionContext*);
+ SnapshotFileCallback(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallbackBase*, ExecutionContext*);
String m_name;
KURL m_url;
Persistent<BlobCallback> m_successCallback;
@@ -164,11 +191,11 @@
class VoidCallbacks final : public FileSystemCallbacksBase {
public:
- static std::unique_ptr<AsyncFileSystemCallbacks> create(VoidCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
+ static std::unique_ptr<AsyncFileSystemCallbacks> create(VoidCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
void didSucceed() override;
private:
- VoidCallbacks(VoidCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
+ VoidCallbacks(VoidCallback*, ErrorCallbackBase*, ExecutionContext*, DOMFileSystemBase*);
Persistent<VoidCallback> m_successCallback;
};
diff --git a/third_party/WebKit/Source/modules/filesystem/FileWriter.cpp b/third_party/WebKit/Source/modules/filesystem/FileWriter.cpp
index 28b16df..e7a941d3 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileWriter.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/FileWriter.cpp
@@ -288,7 +288,7 @@
m_readyState = DONE;
m_truncateLength = -1;
if (FileError::OK != code) {
- m_error = FileError::create(code);
+ m_error = FileError::createDOMException(code);
if (FileError::ABORT_ERR == code)
fireEvent(EventTypeNames::abort);
else
@@ -313,7 +313,7 @@
{
ASSERT(errorCode);
FileError::throwDOMException(exceptionState, errorCode);
- m_error = FileError::create(errorCode);
+ m_error = FileError::createDOMException(errorCode);
}
DEFINE_TRACE(FileWriter)
diff --git a/third_party/WebKit/Source/modules/filesystem/FileWriter.h b/third_party/WebKit/Source/modules/filesystem/FileWriter.h
index 0ea4dca1..128d926 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileWriter.h
+++ b/third_party/WebKit/Source/modules/filesystem/FileWriter.h
@@ -69,7 +69,7 @@
void truncate(long long length, ExceptionState&);
void abort(ExceptionState&);
ReadyState getReadyState() const { return m_readyState; }
- FileError* error() const { return m_error.get(); }
+ DOMException* error() const { return m_error.get(); }
// WebFileWriterClient
void didWrite(long long bytes, bool complete) override;
@@ -115,7 +115,7 @@
void setError(FileError::ErrorCode, ExceptionState&);
- Member<FileError> m_error;
+ Member<DOMException> m_error;
ReadyState m_readyState;
Operation m_operationInProgress;
Operation m_queuedOperation;
diff --git a/third_party/WebKit/Source/modules/filesystem/FileWriter.idl b/third_party/WebKit/Source/modules/filesystem/FileWriter.idl
index 038404e..5d3f73ef 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileWriter.idl
+++ b/third_party/WebKit/Source/modules/filesystem/FileWriter.idl
@@ -47,7 +47,7 @@
[RaisesException] void abort();
- readonly attribute FileError error;
+ readonly attribute DOMException? error;
readonly attribute long long position;
readonly attribute long long length;
diff --git a/third_party/WebKit/Source/modules/filesystem/SyncCallbackHelper.h b/third_party/WebKit/Source/modules/filesystem/SyncCallbackHelper.h
index 534242f..18cbc192 100644
--- a/third_party/WebKit/Source/modules/filesystem/SyncCallbackHelper.h
+++ b/third_party/WebKit/Source/modules/filesystem/SyncCallbackHelper.h
@@ -39,9 +39,9 @@
#include "modules/filesystem/EntriesCallback.h"
#include "modules/filesystem/EntryCallback.h"
#include "modules/filesystem/EntrySync.h"
-#include "modules/filesystem/ErrorCallback.h"
#include "modules/filesystem/FileEntry.h"
#include "modules/filesystem/FileSystemCallback.h"
+#include "modules/filesystem/FileSystemCallbacks.h"
#include "modules/filesystem/MetadataCallback.h"
#include "platform/heap/Handle.h"
@@ -67,7 +67,7 @@
}
SuccessCallback* getSuccessCallback() { return SuccessCallbackImpl::create(this); }
- ErrorCallback* getErrorCallback() { return ErrorCallbackImpl::create(this); }
+ ErrorCallbackBase* getErrorCallback() { return ErrorCallbackImpl::create(this); }
DEFINE_INLINE_TRACE()
{
@@ -112,23 +112,22 @@
Member<HelperType> m_helper;
};
- class ErrorCallbackImpl final : public ErrorCallback {
+ class ErrorCallbackImpl final : public ErrorCallbackBase {
public:
static ErrorCallbackImpl* create(HelperType* helper)
{
return new ErrorCallbackImpl(helper);
}
- void handleEvent(FileError* error) override
+ void invoke(FileError::ErrorCode error) override
{
- ASSERT(error);
- m_helper->setError(error->code());
+ m_helper->setError(error);
}
DEFINE_INLINE_TRACE()
{
visitor->trace(m_helper);
- ErrorCallback::trace(visitor);
+ ErrorCallbackBase::trace(visitor);
}
private:
@@ -139,9 +138,9 @@
Member<HelperType> m_helper;
};
- void setError(FileError::ErrorCode code)
+ void setError(FileError::ErrorCode error)
{
- m_errorCode = code;
+ m_errorCode = error;
m_completed = true;
}
diff --git a/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp b/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp
index b13018d..56687be 100644
--- a/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp
@@ -49,17 +49,17 @@
{
ExecutionContext* secureContext = worker.getExecutionContext();
if (!secureContext->getSecurityOrigin()->canAccessFileSystem()) {
- DOMFileSystem::reportError(&worker, errorCallback, FileError::create(FileError::SECURITY_ERR));
+ DOMFileSystem::reportError(&worker, ScriptErrorCallback::wrap(errorCallback), FileError::SECURITY_ERR);
return;
}
FileSystemType fileSystemType = static_cast<FileSystemType>(type);
if (!DOMFileSystemBase::isValidType(fileSystemType)) {
- DOMFileSystem::reportError(&worker, errorCallback, FileError::create(FileError::INVALID_MODIFICATION_ERR));
+ DOMFileSystem::reportError(&worker, ScriptErrorCallback::wrap(errorCallback), FileError::INVALID_MODIFICATION_ERR);
return;
}
- LocalFileSystem::from(worker)->requestFileSystem(&worker, fileSystemType, size, FileSystemCallbacks::create(successCallback, errorCallback, &worker, fileSystemType));
+ LocalFileSystem::from(worker)->requestFileSystem(&worker, fileSystemType, size, FileSystemCallbacks::create(successCallback, ScriptErrorCallback::wrap(errorCallback), &worker, fileSystemType));
}
DOMFileSystemSync* WorkerGlobalScopeFileSystem::webkitRequestFileSystemSync(WorkerGlobalScope& worker, int type, long long size, ExceptionState& exceptionState)
@@ -89,16 +89,16 @@
KURL completedURL = worker.completeURL(url);
ExecutionContext* secureContext = worker.getExecutionContext();
if (!secureContext->getSecurityOrigin()->canAccessFileSystem() || !secureContext->getSecurityOrigin()->canRequest(completedURL)) {
- DOMFileSystem::reportError(&worker, errorCallback, FileError::create(FileError::SECURITY_ERR));
+ DOMFileSystem::reportError(&worker, ScriptErrorCallback::wrap(errorCallback), FileError::SECURITY_ERR);
return;
}
if (!completedURL.isValid()) {
- DOMFileSystem::reportError(&worker, errorCallback, FileError::create(FileError::ENCODING_ERR));
+ DOMFileSystem::reportError(&worker, ScriptErrorCallback::wrap(errorCallback), FileError::ENCODING_ERR);
return;
}
- LocalFileSystem::from(worker)->resolveURL(&worker, completedURL, ResolveURICallbacks::create(successCallback, errorCallback, &worker));
+ LocalFileSystem::from(worker)->resolveURL(&worker, completedURL, ResolveURICallbacks::create(successCallback, ScriptErrorCallback::wrap(errorCallback), &worker));
}
EntrySync* WorkerGlobalScopeFileSystem::webkitResolveLocalFileSystemSyncURL(WorkerGlobalScope& worker, const String& url, ExceptionState& exceptionState)
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp
index e9511d1..3311168 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp
@@ -5,6 +5,7 @@
#include "modules/presentation/PresentationConnectionCallbacks.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "core/dom/DOMException.h"
#include "modules/presentation/PresentationConnection.h"
#include "modules/presentation/PresentationError.h"
#include "modules/presentation/PresentationRequest.h"
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp b/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
index 7f79b25..9daf2ae7 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationRequest.cpp
@@ -8,6 +8,7 @@
#include "bindings/core/v8/ExceptionState.h"
#include "bindings/core/v8/ScriptPromise.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "core/dom/DOMException.h"
#include "core/dom/Document.h"
#include "core/dom/ExecutionContext.h"
#include "core/frame/Settings.h"