Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Side by Side Diff: webkit/default_plugin/plugin_install_job_monitor.h

Issue 18824: thread.cc race fix take 2 (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WEBKIT_DEFAULT_PLUGIN_PLUGIN_INSTALL_JOB_MONITOR_H__ 5 #ifndef WEBKIT_DEFAULT_PLUGIN_PLUGIN_INSTALL_JOB_MONITOR_H__
6 #define WEBKIT_DEFAULT_PLUGIN_PLUGIN_INSTALL_JOB_MONITOR_H__ 6 #define WEBKIT_DEFAULT_PLUGIN_PLUGIN_INSTALL_JOB_MONITOR_H__
7 7
8 #include <windows.h> 8 #include <windows.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/thread.h" 11 #include "base/thread.h"
12 #include "base/ref_counted.h"
12 13
13 // Provides the plugin installation job monitoring functionality. 14 // Provides the plugin installation job monitoring functionality.
14 // The PluginInstallationJobMonitorThread class represents a background 15 // The PluginInstallationJobMonitorThread class represents a background
15 // thread which monitors the install job completion port which is associated 16 // thread which monitors the install job completion port which is associated
16 // with the job when an instance of this class is initialized. 17 // with the job when an instance of this class is initialized.
17 class PluginInstallationJobMonitorThread : public base::Thread { 18 class PluginInstallationJobMonitorThread : public base::Thread,
19 public base::RefCountedThreadSafe<PluginInstallationJobMonitorThread> {
jeremy 2009/01/26 23:00:34 Also 4 spaces. Personally, I'd actually format th
John Grabowski 2009/01/27 00:31:25 Reformatted.
20
18 public: 21 public:
19 PluginInstallationJobMonitorThread(); 22 PluginInstallationJobMonitorThread();
20 virtual ~PluginInstallationJobMonitorThread(); 23 virtual ~PluginInstallationJobMonitorThread();
21 24
22 // Initializes the plugin install job. This involves creating the job object 25 // Initializes the plugin install job. This involves creating the job object
23 // and starting the thread which monitors the job completion port. 26 // and starting the thread which monitors the job completion port.
24 // Returns true on success. 27 // Returns true on success.
25 bool Initialize(); 28 bool Initialize();
26 29
27 // Stops job monitoring and invokes the base Stop function. 30 // Stops job monitoring and invokes the base Stop function.
(...skipping 11 matching lines...) Expand all
39 42
40 // Adds a process to the job object. 43 // Adds a process to the job object.
41 // 44 //
42 // Parameters: 45 // Parameters:
43 // process_handle 46 // process_handle
44 // Handle to the process which is to be added to the plugin install job. 47 // Handle to the process which is to be added to the plugin install job.
45 // Returns true on success. 48 // Returns true on success.
46 bool AssignProcessToJob(HANDLE process_handle); 49 bool AssignProcessToJob(HANDLE process_handle);
47 50
48 protected: 51 protected:
52 // Installs a task on our thread to call WaitForJobThread(). We
53 // can't call it directly since we would deadlock (thread which
54 // creates me blocks until Start() returns, and Start() doesn't
55 // return until Init() does).
56 virtual void Init();
57
49 // Blocks on the plugin installation job completion port by invoking the 58 // Blocks on the plugin installation job completion port by invoking the
50 // GetQueuedCompletionStatus API. 59 // GetQueuedCompletionStatus API.
51 // We return from this function when the job monitoring thread is stopped. 60 // We return from this function when the job monitoring thread is stopped.
52 virtual void Init(); 61 virtual void WaitForJobThread();
53 62
54 private: 63 private:
55 // The install job completion port. Created in Init. 64 // The install job completion port. Created in Init.
56 HANDLE install_job_completion_port_; 65 HANDLE install_job_completion_port_;
57 // Indicates that job monitoring is to be stopped 66 // Indicates that job monitoring is to be stopped
58 bool stop_job_monitoring_; 67 bool stop_job_monitoring_;
59 // The install job. Should be created before the job monitor thread 68 // The install job. Should be created before the job monitor thread
60 // is started. 69 // is started.
61 HANDLE install_job_; 70 HANDLE install_job_;
62 // The plugin window handle. 71 // The plugin window handle.
63 HWND plugin_window_; 72 HWND plugin_window_;
64 73
65 DISALLOW_EVIL_CONSTRUCTORS(PluginInstallationJobMonitorThread); 74 DISALLOW_EVIL_CONSTRUCTORS(PluginInstallationJobMonitorThread);
66 }; 75 };
67 76
68 #endif // WEBKIT_DEFAULT_PLUGIN_PLUGIN_INSTALL_JOB_MONITOR_H__ 77 #endif // WEBKIT_DEFAULT_PLUGIN_PLUGIN_INSTALL_JOB_MONITOR_H__
69 78
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698