diff options
Diffstat (limited to 'chrome/browser/user_style_sheet_watcher.cc')
-rw-r--r-- | chrome/browser/user_style_sheet_watcher.cc | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/chrome/browser/user_style_sheet_watcher.cc b/chrome/browser/user_style_sheet_watcher.cc index 2d3e945..2bc9568 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) { |