1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_USER_STYLE_SHEET_WATCHER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_USER_STYLE_SHEET_WATCHER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/files/file_path_watcher.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass UserStyleSheetLoader; 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Watches the user style sheet file and triggers reloads on the file thread 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// whenever the file changes. 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass UserStyleSheetWatcher 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : public base::RefCountedThreadSafe<UserStyleSheetWatcher, 24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::DeleteOnUIThread>, 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public NotificationObserver { 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit UserStyleSheetWatcher(const FilePath& profile_path); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Init(); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL user_style_sheet() const; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver interface 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend class DeleteTask<UserStyleSheetWatcher>; 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~UserStyleSheetWatcher(); 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The directory containing User StyleSheets/Custom.css. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath profile_path_; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The loader object. 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<UserStyleSheetLoader> loader_; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Watches for changes to the css file so we can reload the style sheet. 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<base::files::FilePathWatcher> file_watcher_; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(UserStyleSheetWatcher); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_USER_STYLE_SHEET_WATCHER_H_ 59