OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "chrome/browser/shell_integration.h" | 5 #include "chrome/browser/shell_integration.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 } else { | 54 } else { |
55 // Use '--app=url' instead of just 'url' to launch the browser with minimal | 55 // Use '--app=url' instead of just 'url' to launch the browser with minimal |
56 // chrome. | 56 // chrome. |
57 // Note: Do not change this flag! Old Gears shortcuts will break if you do! | 57 // Note: Do not change this flag! Old Gears shortcuts will break if you do! |
58 new_cmd_line.AppendSwitchASCII(switches::kApp, url.spec()); | 58 new_cmd_line.AppendSwitchASCII(switches::kApp, url.spec()); |
59 } | 59 } |
60 return new_cmd_line; | 60 return new_cmd_line; |
61 } | 61 } |
62 | 62 |
63 /////////////////////////////////////////////////////////////////////////////// | 63 /////////////////////////////////////////////////////////////////////////////// |
| 64 // ShellIntegration::DefaultWebClientWorker |
| 65 // |
| 66 |
| 67 ShellIntegration::DefaultWebClientWorker::DefaultWebClientWorker( |
| 68 DefaultWebClientObserver* observer) |
| 69 : observer_(observer) { |
| 70 } |
| 71 |
| 72 void ShellIntegration::DefaultWebClientWorker::StartCheckIsDefault() { |
| 73 if (observer_) { |
| 74 observer_->SetDefaultWebClientUIState(STATE_PROCESSING); |
| 75 BrowserThread::PostTask( |
| 76 BrowserThread::FILE, FROM_HERE, |
| 77 NewRunnableMethod( |
| 78 this, &DefaultWebClientWorker::ExecuteCheckIsDefault)); |
| 79 } |
| 80 } |
| 81 |
| 82 void ShellIntegration::DefaultWebClientWorker::StartSetAsDefault() { |
| 83 if (observer_) { |
| 84 observer_->SetDefaultWebClientUIState(STATE_PROCESSING); |
| 85 } |
| 86 BrowserThread::PostTask( |
| 87 BrowserThread::FILE, FROM_HERE, |
| 88 NewRunnableMethod( |
| 89 this, &DefaultWebClientWorker::ExecuteSetAsDefault)); |
| 90 } |
| 91 |
| 92 void ShellIntegration::DefaultWebClientWorker::ObserverDestroyed() { |
| 93 // Our associated view has gone away, so we shouldn't call back to it if |
| 94 // our worker thread returns after the view is dead. |
| 95 observer_ = NULL; |
| 96 } |
| 97 |
| 98 /////////////////////////////////////////////////////////////////////////////// |
| 99 // DefaultWebClientWorker, private: |
| 100 |
| 101 void ShellIntegration::DefaultWebClientWorker::ExecuteCheckIsDefault() { |
| 102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 103 DefaultWebClientState state = CheckIsDefault(); |
| 104 BrowserThread::PostTask( |
| 105 BrowserThread::UI, FROM_HERE, |
| 106 NewRunnableMethod( |
| 107 this, &DefaultWebClientWorker::CompleteCheckIsDefault, state)); |
| 108 } |
| 109 |
| 110 void ShellIntegration::DefaultWebClientWorker::CompleteCheckIsDefault( |
| 111 DefaultWebClientState state) { |
| 112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 113 UpdateUI(state); |
| 114 } |
| 115 |
| 116 void ShellIntegration::DefaultWebClientWorker::ExecuteSetAsDefault() { |
| 117 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| 118 SetAsDefault(); |
| 119 ShellIntegration::SetAsDefaultBrowser(); |
| 120 BrowserThread::PostTask( |
| 121 BrowserThread::UI, FROM_HERE, |
| 122 NewRunnableMethod( |
| 123 this, &DefaultWebClientWorker::CompleteSetAsDefault)); |
| 124 } |
| 125 |
| 126 void ShellIntegration::DefaultWebClientWorker::CompleteSetAsDefault() { |
| 127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 128 // Set as default completed, check again to make sure it stuck... |
| 129 StartCheckIsDefault(); |
| 130 } |
| 131 |
| 132 void ShellIntegration::DefaultWebClientWorker::UpdateUI( |
| 133 DefaultWebClientState state) { |
| 134 if (observer_) { |
| 135 switch (state) { |
| 136 case NOT_DEFAULT_WEB_CLIENT: |
| 137 observer_->SetDefaultWebClientUIState(STATE_NOT_DEFAULT); |
| 138 break; |
| 139 case IS_DEFAULT_WEB_CLIENT: |
| 140 observer_->SetDefaultWebClientUIState(STATE_IS_DEFAULT); |
| 141 break; |
| 142 case UNKNOWN_DEFAULT_WEB_CLIENT: |
| 143 observer_->SetDefaultWebClientUIState(STATE_UNKNOWN); |
| 144 break; |
| 145 default: |
| 146 break; |
| 147 } |
| 148 } |
| 149 } |
| 150 |
| 151 /////////////////////////////////////////////////////////////////////////////// |
64 // ShellIntegration::DefaultBrowserWorker | 152 // ShellIntegration::DefaultBrowserWorker |
65 // | 153 // |
66 | 154 |
67 ShellIntegration::DefaultBrowserWorker::DefaultBrowserWorker( | 155 ShellIntegration::DefaultBrowserWorker::DefaultBrowserWorker( |
68 DefaultBrowserObserver* observer) | 156 DefaultWebClientObserver* observer) |
69 : observer_(observer) { | 157 : DefaultWebClientWorker(observer) { |
70 } | |
71 | |
72 void ShellIntegration::DefaultBrowserWorker::StartCheckDefaultBrowser() { | |
73 observer_->SetDefaultBrowserUIState(STATE_PROCESSING); | |
74 BrowserThread::PostTask( | |
75 BrowserThread::FILE, FROM_HERE, | |
76 NewRunnableMethod( | |
77 this, &DefaultBrowserWorker::ExecuteCheckDefaultBrowser)); | |
78 } | |
79 | |
80 void ShellIntegration::DefaultBrowserWorker::StartSetAsDefaultBrowser() { | |
81 observer_->SetDefaultBrowserUIState(STATE_PROCESSING); | |
82 BrowserThread::PostTask( | |
83 BrowserThread::FILE, FROM_HERE, | |
84 NewRunnableMethod( | |
85 this, &DefaultBrowserWorker::ExecuteSetAsDefaultBrowser)); | |
86 } | |
87 | |
88 void ShellIntegration::DefaultBrowserWorker::ObserverDestroyed() { | |
89 // Our associated view has gone away, so we shouldn't call back to it if | |
90 // our worker thread returns after the view is dead. | |
91 observer_ = NULL; | |
92 } | 158 } |
93 | 159 |
94 /////////////////////////////////////////////////////////////////////////////// | 160 /////////////////////////////////////////////////////////////////////////////// |
95 // DefaultBrowserWorker, private: | 161 // DefaultBrowserWorker, private: |
96 | 162 |
97 void ShellIntegration::DefaultBrowserWorker::ExecuteCheckDefaultBrowser() { | 163 ShellIntegration::DefaultWebClientState |
98 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 164 ShellIntegration::DefaultBrowserWorker::CheckIsDefault() { |
99 DefaultBrowserState state = ShellIntegration::IsDefaultBrowser(); | 165 return ShellIntegration::IsDefaultBrowser(); |
100 BrowserThread::PostTask( | |
101 BrowserThread::UI, FROM_HERE, | |
102 NewRunnableMethod( | |
103 this, &DefaultBrowserWorker::CompleteCheckDefaultBrowser, state)); | |
104 } | 166 } |
105 | 167 |
106 void ShellIntegration::DefaultBrowserWorker::CompleteCheckDefaultBrowser( | 168 void ShellIntegration::DefaultBrowserWorker::SetAsDefault() { |
107 DefaultBrowserState state) { | 169 ShellIntegration::SetAsDefaultBrowser(); |
108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
109 UpdateUI(state); | |
110 } | 170 } |
111 | 171 |
112 void ShellIntegration::DefaultBrowserWorker::ExecuteSetAsDefaultBrowser() { | 172 /////////////////////////////////////////////////////////////////////////////// |
113 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 173 // ShellIntegration::DefaultProtocolClientWorker |
114 ShellIntegration::SetAsDefaultBrowser(); | 174 // |
115 BrowserThread::PostTask( | 175 |
116 BrowserThread::UI, FROM_HERE, | 176 ShellIntegration::DefaultProtocolClientWorker::DefaultProtocolClientWorker( |
117 NewRunnableMethod( | 177 DefaultWebClientObserver* observer, const std::string& protocol) |
118 this, &DefaultBrowserWorker::CompleteSetAsDefaultBrowser)); | 178 : DefaultWebClientWorker(observer), |
| 179 protocol_(protocol) { |
119 } | 180 } |
120 | 181 |
121 void ShellIntegration::DefaultBrowserWorker::CompleteSetAsDefaultBrowser() { | 182 /////////////////////////////////////////////////////////////////////////////// |
122 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 183 // DefaultProtocolClientWorker, private: |
123 if (observer_) { | 184 |
124 // Set as default completed, check again to make sure it stuck... | 185 ShellIntegration::DefaultWebClientState |
125 StartCheckDefaultBrowser(); | 186 ShellIntegration::DefaultProtocolClientWorker::CheckIsDefault() { |
126 } | 187 return ShellIntegration::IsDefaultProtocolClient(protocol_); |
127 } | 188 } |
128 | 189 |
129 void ShellIntegration::DefaultBrowserWorker::UpdateUI( | 190 void ShellIntegration::DefaultProtocolClientWorker::SetAsDefault() { |
130 DefaultBrowserState state) { | 191 ShellIntegration::SetAsDefaultProtocolClient(protocol_); |
131 if (observer_) { | |
132 switch (state) { | |
133 case NOT_DEFAULT_BROWSER: | |
134 observer_->SetDefaultBrowserUIState(STATE_NOT_DEFAULT); | |
135 break; | |
136 case IS_DEFAULT_BROWSER: | |
137 observer_->SetDefaultBrowserUIState(STATE_IS_DEFAULT); | |
138 break; | |
139 case UNKNOWN_DEFAULT_BROWSER: | |
140 observer_->SetDefaultBrowserUIState(STATE_UNKNOWN); | |
141 break; | |
142 default: | |
143 break; | |
144 } | |
145 } | |
146 } | 192 } |
OLD | NEW |