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

Side by Side Diff: chrome/browser/plugin_data_remover.cc

Issue 4832002: Add PluginDataRemover. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: foo Created 10 years, 1 month 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
« no previous file with comments | « chrome/browser/plugin_data_remover.h ('k') | chrome/browser/plugin_service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/plugin_data_remover.h"
6
7 #include "base/message_loop_proxy.h"
8 #include "chrome/browser/browser_thread.h"
9 #include "chrome/browser/plugin_service.h"
10 #include "chrome/common/plugin_messages.h"
11 #include "ipc/ipc_channel.h"
12
13 #if defined(OS_POSIX)
14 #include "ipc/ipc_channel_posix.h"
15 #endif
16
17 namespace {
18 const std::string flash_mime_type = "application/x-shockwave-flash";
19 const int64 timeout_ms = 10000;
20 }
21
22 PluginDataRemover::PluginDataRemover()
23 : channel_(NULL),
24 method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
25 }
26
27 PluginDataRemover::~PluginDataRemover() {
28 DCHECK(!done_task_.get());
29 if (!BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, channel_))
30 delete channel_;
31 }
32
33 void PluginDataRemover::StartRemoving(base::Time begin_time, Task* done_task) {
34 DCHECK(!done_task_.get());
35 begin_time_ = begin_time;
36
37 message_loop_ = base::MessageLoopProxy::CreateForCurrentThread();
38 done_task_.reset(done_task);
39
40 PluginService::GetInstance()->OpenChannelToPlugin(
41 GURL(), flash_mime_type, this);
42
43 MessageLoop::current()->PostDelayedTask(
44 FROM_HERE,
45 method_factory_.NewRunnableMethod(&PluginDataRemover::OnTimeout),
46 timeout_ms);
47 }
48
49 int PluginDataRemover::ID() {
50 // Generate an ID for the browser process.
51 return ChildProcessInfo::GenerateChildProcessUniqueId();
52 }
53
54 bool PluginDataRemover::OffTheRecord() {
55 return false;
56 }
57
58 void PluginDataRemover::SetPluginInfo(const WebPluginInfo& info) {
59 }
60
61 void PluginDataRemover::OnChannelOpened(const IPC::ChannelHandle& handle) {
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
63 DCHECK(!channel_);
64 #if defined(OS_POSIX)
65 // If we received a ChannelHandle, register it now.
66 if (handle.socket.fd >= 0)
67 IPC::AddChannelSocket(handle.name, handle.socket.fd);
68 #endif
69 channel_ = new IPC::Channel(handle.name, IPC::Channel::MODE_CLIENT, this);
70 if (!channel_->Connect()) {
71 NOTREACHED() << "Couldn't connect to plugin";
72 SignalDone();
73 return;
74 }
75
76 if (!channel_->Send(
77 new PluginMsg_ClearSiteData(0, std::string(), begin_time_))) {
78 NOTREACHED() << "Couldn't send ClearSiteData message";
79 SignalDone();
80 }
81 }
82
83 void PluginDataRemover::OnError() {
84 NOTREACHED() << "Couldn't open plugin channel";
85 SignalDone();
86 }
87
88 void PluginDataRemover::OnClearSiteDataResult(bool success) {
89 DCHECK(success) << "ClearSiteData returned error";
90 SignalDone();
91 }
92
93 void PluginDataRemover::OnTimeout() {
94 NOTREACHED() << "Timed out";
95 SignalDone();
96 }
97
98 void PluginDataRemover::OnMessageReceived(const IPC::Message& msg) {
99 IPC_BEGIN_MESSAGE_MAP(PluginDataRemover, msg)
100 IPC_MESSAGE_HANDLER(PluginHostMsg_ClearSiteDataResult,
101 OnClearSiteDataResult)
102 IPC_MESSAGE_UNHANDLED_ERROR()
103 IPC_END_MESSAGE_MAP()
104 }
105
106 void PluginDataRemover::OnChannelError() {
107 NOTREACHED() << "Channel error";
108 SignalDone();
109 }
110
111 void PluginDataRemover::SignalDone() {
112 // This method could be called from the timeout callback while in another
113 // callback, so we keep a lock while releasing |done_task_|.
114 AutoLock lock(task_lock_);
115 if (!done_task_.get())
116 return;
117 message_loop_->PostTask(FROM_HERE, done_task_.release());
118 message_loop_ = NULL;
119 }
OLDNEW
« no previous file with comments | « chrome/browser/plugin_data_remover.h ('k') | chrome/browser/plugin_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698