Index: webkit/support/weburl_loader_mock_factory.cc |
=================================================================== |
--- webkit/support/weburl_loader_mock_factory.cc (revision 0) |
+++ webkit/support/weburl_loader_mock_factory.cc (revision 0) |
@@ -0,0 +1,136 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "webkit/support/weburl_loader_mock_factory.h" |
+ |
+#include "base/file_util.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebURLError.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h" |
+#include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h" |
+#include "webkit/support/weburl_loader_mock.h" |
+ |
+using WebKit::WebData; |
+using WebKit::WebString; |
+using WebKit::WebURL; |
+using WebKit::WebURLError; |
+using WebKit::WebURLLoader; |
+using WebKit::WebURLRequest; |
+using WebKit::WebURLResponse; |
+ |
+void WebURLLoaderMockFactory::RegisterURL(const WebURL& url, |
+ const WebURLResponse& response, |
+ const WebString& file_path) { |
+ ResponseInfo response_info; |
+ response_info.response = response; |
+ if (!file_path.isNull() && !file_path.isEmpty()) { |
+#if defined(OS_POSIX) |
+ // TODO(jcivelli): On Linux, UTF8 might not be correct. |
+ response_info.file_path = |
+ FilePath(static_cast<std::string>(file_path.utf8())); |
+#elif defined(OS_WIN) |
+ response_info.file_path = |
+ FilePath(std::wstring(file_path.data(), file_path.length())); |
+#endif |
+ DCHECK(file_util::PathExists(response_info.file_path)); |
+ } |
+ |
+ DCHECK(url_to_reponse_info_.find(url) == url_to_reponse_info_.end()); |
+ url_to_reponse_info_[url] = response_info; |
+} |
+ |
+void WebURLLoaderMockFactory::UnregisterURL(const WebKit::WebURL& url) { |
+ URLToResponseMap::iterator iter = url_to_reponse_info_.find(url); |
+ DCHECK(iter != url_to_reponse_info_.end()); |
+ url_to_reponse_info_.erase(iter); |
+} |
+ |
+void WebURLLoaderMockFactory::UnregisterAllURLs() { |
+ url_to_reponse_info_.clear(); |
+} |
+ |
+void WebURLLoaderMockFactory::ServeAsynchronousRequests() { |
+ // Serving a request might trigger more requests, so we cannot iterate on |
+ // pending_loaders_ as it might get modified. |
+ while (!pending_loaders_.empty()) { |
+ LoaderToRequestMap::iterator iter = pending_loaders_.begin(); |
+ WebURLLoaderMock* loader = iter->first; |
+ const WebURLRequest& request = iter->second; |
+ WebURLResponse response; |
+ WebURLError error; |
+ WebData data; |
+ LoadRequest(request, &response, &error, &data); |
+ loader->ServeAsynchronousRequest(response, data, error); |
+ pending_loaders_.erase(iter); |
+ } |
+} |
+ |
+bool WebURLLoaderMockFactory::IsMockedURL(const WebKit::WebURL& url) { |
+ return url_to_reponse_info_.find(url) != url_to_reponse_info_.end(); |
+} |
+ |
+void WebURLLoaderMockFactory::CancelLoad(WebURLLoaderMock* loader) { |
+ LoaderToRequestMap::iterator iter = pending_loaders_.find(loader); |
+ DCHECK(iter != pending_loaders_.end()); |
+ pending_loaders_.erase(iter); |
+} |
+ |
+WebURLLoader* WebURLLoaderMockFactory::CreateURLLoader( |
+ WebURLLoader* default_loader) { |
+ DCHECK(default_loader); |
+ return new WebURLLoaderMock(this, default_loader); |
+} |
+ |
+void WebURLLoaderMockFactory::LoadSynchronously(const WebURLRequest& request, |
+ WebURLResponse* response, |
+ WebURLError* error, |
+ WebData* data) { |
+ LoadRequest(request, response, error, data); |
+} |
+ |
+void WebURLLoaderMockFactory::LoadAsynchronouly(const WebURLRequest& request, |
+ WebURLLoaderMock* loader) { |
+ LoaderToRequestMap::iterator iter = pending_loaders_.find(loader); |
+ DCHECK(iter == pending_loaders_.end()); |
+ pending_loaders_[loader] = request; |
+} |
+ |
+void WebURLLoaderMockFactory::LoadRequest(const WebURLRequest& request, |
+ WebURLResponse* response, |
+ WebURLError* error, |
+ WebData* data) { |
+ URLToResponseMap::const_iterator iter = |
+ url_to_reponse_info_.find(request.url()); |
+ if (iter == url_to_reponse_info_.end()) { |
+ // Non mocked URLs should not have been passed to the default URLLoader. |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ if (!ReadFile(iter->second.file_path, data)) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ *response = iter->second.response; |
+} |
+ |
+// static |
+bool WebURLLoaderMockFactory::ReadFile(const FilePath& file_path, |
+ WebData* data) { |
+ int64 file_size = 0; |
+ if (!file_util::GetFileSize(file_path, &file_size)) |
+ return false; |
+ |
+ int size = static_cast<int>(file_size); |
+ scoped_array<char> buffer(new char[size]); |
+ data->reset(); |
+ int read_count = file_util::ReadFile(file_path, buffer.get(), size); |
+ if (read_count == -1) |
+ return false; |
+ DCHECK(read_count == size); |
+ data->assign(buffer.get(), size); |
+ |
+ return true; |
+} |
Property changes on: webkit\support\weburl_loader_mock_factory.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |