Index: chrome/browser/user_style_sheet_watcher.cc |
diff --git a/chrome/browser/user_style_sheet_watcher.cc b/chrome/browser/user_style_sheet_watcher.cc |
index 2d3e945343515962daebbbc7c8664afa9fff9b95..2bc95688861f5f9621fceef47f0fe8e14e3a2738 100644 |
--- a/chrome/browser/user_style_sheet_watcher.cc |
+++ b/chrome/browser/user_style_sheet_watcher.cc |
@@ -9,6 +9,15 @@ |
#include "chrome/common/notification_service.h" |
#include "chrome/common/notification_type.h" |
+namespace { |
+ |
+// The subdirectory of the profile that contains the style sheet. |
+const char kStyleSheetDir[] = "User StyleSheets"; |
+// The filename of the stylesheet. |
+const char kUserStyleSheetFile[] = "Custom.css"; |
+ |
+} // namespace |
+ |
UserStyleSheetWatcher::UserStyleSheetWatcher(const FilePath& profile_path) |
: profile_path_(profile_path), |
has_loaded_(false) { |
@@ -33,6 +42,12 @@ void UserStyleSheetWatcher::Observe(NotificationType type, |
registrar_.RemoveAll(); |
} |
+void UserStyleSheetWatcher::OnFileChanged(const FilePath& path) { |
+ ChromeThread::PostTask(ChromeThread::FILE, FROM_HERE, |
+ NewRunnableMethod(this, &UserStyleSheetWatcher::LoadStyleSheet, |
+ profile_path_)); |
+} |
+ |
void UserStyleSheetWatcher::Init() { |
ChromeThread::PostTask(ChromeThread::FILE, FROM_HERE, |
NewRunnableMethod(this, &UserStyleSheetWatcher::LoadStyleSheet, |
@@ -43,20 +58,20 @@ void UserStyleSheetWatcher::LoadStyleSheet(const FilePath& profile_path) { |
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::FILE)); |
// We keep the user style sheet in a subdir so we can watch for changes |
// to the file. |
- FilePath style_sheet_dir = profile_path.AppendASCII("User StyleSheets"); |
+ FilePath style_sheet_dir = profile_path.AppendASCII(kStyleSheetDir); |
if (!file_util::DirectoryExists(style_sheet_dir)) { |
if (!file_util::CreateDirectory(style_sheet_dir)) |
return; |
} |
// Create the file if it doesn't exist. |
- FilePath css_file = style_sheet_dir.AppendASCII("Custom.css"); |
+ FilePath css_file = style_sheet_dir.AppendASCII(kUserStyleSheetFile); |
if (!file_util::PathExists(css_file)) |
file_util::WriteFile(css_file, "", 0); |
std::string css; |
bool rv = file_util::ReadFileToString(css_file, &css); |
GURL style_sheet_url; |
- if (rv) { |
+ if (rv && !css.empty()) { |
std::string css_base64; |
rv = base::Base64Encode(css, &css_base64); |
if (rv) { |
@@ -68,6 +83,12 @@ void UserStyleSheetWatcher::LoadStyleSheet(const FilePath& profile_path) { |
ChromeThread::PostTask(ChromeThread::UI, FROM_HERE, |
NewRunnableMethod(this, &UserStyleSheetWatcher::SetStyleSheet, |
style_sheet_url)); |
+ |
+ if (!file_watcher_.get()) { |
+ file_watcher_.reset(new FileWatcher); |
+ file_watcher_->Watch(profile_path_.AppendASCII(kStyleSheetDir) |
+ .AppendASCII(kUserStyleSheetFile), this); |
+ } |
} |
void UserStyleSheetWatcher::SetStyleSheet(const GURL& url) { |