summaryrefslogtreecommitdiffstats
path: root/chrome/browser/search/local_files_ntp_source.cc
diff options
context:
space:
mode:
authorfserb <fserb@chromium.org>2015-07-16 10:14:49 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-16 17:16:43 +0000
commit1c2db4c88504e33fe4c5ccfb4795e5a9b29de5ed (patch)
tree06f78c3f67870d5a29d023dd307cf86572a68bdb /chrome/browser/search/local_files_ntp_source.cc
parent7355493a961bcc4d58df65b316d8860d5ecd3201 (diff)
downloadchromium_src-1c2db4c88504e33fe4c5ccfb4795e5a9b29de5ed.zip
chromium_src-1c2db4c88504e33fe4c5ccfb4795e5a9b29de5ed.tar.gz
chromium_src-1c2db4c88504e33fe4c5ccfb4795e5a9b29de5ed.tar.bz2
Adds support for live reload localNTP assets
Adds a new chrome flag to support local NTP file auto reload This is used only during NTP development cycle, to allow live reload of NTP resources (HTML, JS, CSS) without recompiling, therefore the code is only enabled for dev builds. BUG=508617 Review URL: https://codereview.chromium.org/1228123003 Cr-Commit-Position: refs/heads/master@{#339060}
Diffstat (limited to 'chrome/browser/search/local_files_ntp_source.cc')
-rw-r--r--chrome/browser/search/local_files_ntp_source.cc69
1 files changed, 69 insertions, 0 deletions
diff --git a/chrome/browser/search/local_files_ntp_source.cc b/chrome/browser/search/local_files_ntp_source.cc
new file mode 100644
index 0000000..cb017d9
--- /dev/null
+++ b/chrome/browser/search/local_files_ntp_source.cc
@@ -0,0 +1,69 @@
+// Copyright 2013 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 "chrome/browser/search/local_files_ntp_source.h"
+
+#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/location.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/path_service.h"
+#include "base/strings/string_util.h"
+#include "base/threading/thread_restrictions.h"
+#include "chrome/common/url_constants.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/url_data_source.h"
+
+namespace {
+
+const char kBasePath[] = "chrome/browser/resources/local_ntp";
+
+void CallbackWithLoadedResource(
+ const std::string& origin,
+ const content::URLDataSource::GotDataCallback& callback,
+ const std::string& content) {
+ std::string output = content;
+ if (!origin.empty())
+ base::ReplaceFirstSubstringAfterOffset(&output, 0, "{{ORIGIN}}", origin);
+
+ scoped_refptr<base::RefCountedString> response(
+ base::RefCountedString::TakeString(&output));
+ callback.Run(response.get());
+}
+
+// Read a file to a string and return.
+std::string ReadFileAndReturn(const base::FilePath& path) {
+ std::string data;
+ // This call can fail, but it doesn't matter for our purposes. If it fails,
+ // we simply return an empty string.
+ base::ReadFileToString(path, &data);
+ return data;
+}
+
+} // namespace
+
+namespace local_ntp {
+
+void SendLocalFileResource(
+ const std::string& path,
+ const content::URLDataSource::GotDataCallback& callback) {
+ SendLocalFileResourceWithOrigin(path, std::string(), callback);
+}
+
+void SendLocalFileResourceWithOrigin(
+ const std::string& path,
+ const std::string& origin,
+ const content::URLDataSource::GotDataCallback& callback) {
+ base::FilePath fullpath;
+ PathService::Get(base::DIR_SOURCE_ROOT, &fullpath);
+ fullpath = fullpath.AppendASCII(kBasePath).AppendASCII(path);
+ base::PostTaskAndReplyWithResult(
+ content::BrowserThread::GetBlockingPool(), FROM_HERE,
+ base::Bind(&ReadFileAndReturn, fullpath),
+ base::Bind(&CallbackWithLoadedResource, origin, callback));
+}
+
+} // namespace local_ntp