summaryrefslogtreecommitdiffstats
path: root/WebCore/inspector/InspectorFileSystemAgent.cpp
diff options
context:
space:
mode:
authorTeng-Hui Zhu <ztenghui@google.com>2010-11-10 15:31:59 -0800
committerTeng-Hui Zhu <ztenghui@google.com>2010-11-17 13:35:59 -0800
commit28040489d744e0c5d475a88663056c9040ed5320 (patch)
treec463676791e4a63e452a95f0a12b2a8519730693 /WebCore/inspector/InspectorFileSystemAgent.cpp
parenteff9be92c41913c92fb1d3b7983c071f3e718678 (diff)
downloadexternal_webkit-28040489d744e0c5d475a88663056c9040ed5320.zip
external_webkit-28040489d744e0c5d475a88663056c9040ed5320.tar.gz
external_webkit-28040489d744e0c5d475a88663056c9040ed5320.tar.bz2
Merge WebKit at r71558: Initial merge by git.
Change-Id: Ib345578fa29df7e4bc72b4f00e4a6fddcb754c4c
Diffstat (limited to 'WebCore/inspector/InspectorFileSystemAgent.cpp')
-rw-r--r--WebCore/inspector/InspectorFileSystemAgent.cpp162
1 files changed, 162 insertions, 0 deletions
diff --git a/WebCore/inspector/InspectorFileSystemAgent.cpp b/WebCore/inspector/InspectorFileSystemAgent.cpp
new file mode 100644
index 0000000..2192fd1
--- /dev/null
+++ b/WebCore/inspector/InspectorFileSystemAgent.cpp
@@ -0,0 +1,162 @@
+/*
+ * 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.
+ */
+
+#include "config.h"
+#include "InspectorFileSystemAgent.h"
+
+#if ENABLE(INSPECTOR) && ENABLE(FILE_SYSTEM)
+
+#include "AsyncFileWriter.h"
+#include "Document.h"
+#include "FileSystem.h"
+#include "FileSystemCallbacks.h"
+#include "Frame.h"
+#include "FrameTree.h"
+#include "InspectorController.h"
+#include "InspectorFrontend.h"
+#include "LocalFileSystem.h"
+#include "Page.h"
+#include "RuntimeEnabledFeatures.h"
+
+namespace WebCore {
+
+class InspectorFileSystemAgentCallbacks : public AsyncFileSystemCallbacks {
+public:
+ InspectorFileSystemAgentCallbacks(InspectorFileSystemAgent* agent, AsyncFileSystem::Type type, const String& origin)
+ : m_agent(agent)
+ , m_type(type)
+ , m_origin(origin)
+ {
+ }
+
+ ~InspectorFileSystemAgentCallbacks()
+ {
+ }
+
+ // FileSystemCallbacks is only used for getting filesystem. All other methods are irrelevant and will not be called.
+ void didSucceed()
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ void didOpenFileSystem(const String& name, PassOwnPtr<AsyncFileSystem> fileSystem)
+ {
+ // Agent will be alive even if InspectorController is destroyed until callback is run.
+ m_agent->didGetFileSystemPath(fileSystem->root(), m_type, m_origin);
+ }
+
+ void didReadMetadata(const FileMetadata&)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ void didReadDirectoryEntry(const String& name, bool isDirectory)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ void didReadDirectoryEntries(bool hasMore)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ void didCreateFileWriter(PassOwnPtr<AsyncFileWriter> writer, long long length)
+ {
+ ASSERT_NOT_REACHED();
+ }
+
+ void didFail(int code)
+ {
+ // FIXME: Is it useful to give back the code to Inspector UI?
+ m_agent->didGetFileSystemError(m_type, m_origin);
+ }
+
+private:
+ RefPtr<InspectorFileSystemAgent> m_agent;
+ AsyncFileSystem::Type m_type;
+ String m_origin;
+};
+
+InspectorFileSystemAgent::InspectorFileSystemAgent(InspectorController* inspectorController, InspectorFrontend* frontend)
+ : m_inspectorController(inspectorController)
+ , m_frontend(frontend)
+{
+}
+
+InspectorFileSystemAgent::~InspectorFileSystemAgent() { }
+
+void InspectorFileSystemAgent::stop()
+{
+ m_inspectorController = 0;
+}
+
+void InspectorFileSystemAgent::revealFolderInOS(const String& path)
+{
+ WebCore::revealFolderInOS(path);
+}
+
+void InspectorFileSystemAgent::getFileSystemPathAsync(unsigned int type, const String& origin)
+{
+ if (!RuntimeEnabledFeatures::fileSystemEnabled()) {
+ m_frontend->didGetFileSystemDisabled();
+ return;
+ }
+
+ AsyncFileSystem::Type asyncFileSystemType = static_cast<AsyncFileSystem::Type>(type);
+ Frame* mainFrame = m_inspectorController->inspectedPage()->mainFrame();
+ for (Frame* frame = mainFrame; frame; frame = frame->tree()->traverseNext()) {
+ Document* document = frame->document();
+ if (document && document->securityOrigin()->toString() == origin) {
+ LocalFileSystem::localFileSystem().readFileSystem(document, asyncFileSystemType, 0, new InspectorFileSystemAgentCallbacks(this, asyncFileSystemType, origin));
+ return;
+ }
+ }
+}
+
+void InspectorFileSystemAgent::didGetFileSystemPath(const String& root, AsyncFileSystem::Type type, const String& origin)
+{
+ // When controller is being destroyed, this is set to 0. Agent can live even after m_inspectorController is destroyed.
+ if (!m_inspectorController)
+ return;
+
+ m_frontend->didGetFileSystemPath(root, static_cast<unsigned int>(type), origin);
+}
+
+void InspectorFileSystemAgent::didGetFileSystemError(AsyncFileSystem::Type type, const String& origin)
+{
+ // When controller is being destroyed, this is set to 0. Agent can live even after m_inspectorController is destroyed.
+ if (!m_inspectorController)
+ return;
+ m_frontend->didGetFileSystemError(static_cast<unsigned int>(type), origin);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(INSPECTOR) && ENABLE(FILE_SYSTEM)