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/ui/webui/bug_report_ui.h" | 5 #include "chrome/browser/ui/webui/bug_report_ui.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
13 #include "base/message_loop.h" | 13 #include "base/message_loop.h" |
14 #include "base/string_number_conversions.h" | 14 #include "base/string_number_conversions.h" |
15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
16 #include "base/values.h" | 16 #include "base/values.h" |
17 #include "chrome/browser/bug_report_data.h" | 17 #include "chrome/browser/bug_report_data.h" |
18 #include "chrome/browser/bug_report_util.h" | 18 #include "chrome/browser/bug_report_util.h" |
19 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" |
20 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
21 #include "chrome/browser/ui/browser_list.h" | 21 #include "chrome/browser/ui/browser_list.h" |
22 #include "chrome/browser/ui/browser_window.h" | 22 #include "chrome/browser/ui/browser_window.h" |
| 23 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
23 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" | 24 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" |
24 #include "chrome/browser/ui/webui/screenshot_source.h" | 25 #include "chrome/browser/ui/webui/screenshot_source.h" |
25 #include "chrome/browser/ui/window_snapshot/window_snapshot.h" | 26 #include "chrome/browser/ui/window_snapshot/window_snapshot.h" |
26 #include "chrome/common/chrome_paths.h" | 27 #include "chrome/common/chrome_paths.h" |
27 #include "chrome/common/url_constants.h" | 28 #include "chrome/common/url_constants.h" |
28 #include "content/browser/tab_contents/tab_contents.h" | 29 #include "content/browser/tab_contents/navigation_controller.h" |
29 #include "content/public/browser/browser_thread.h" | 30 #include "content/public/browser/browser_thread.h" |
30 #include "content/public/browser/navigation_entry.h" | 31 #include "content/public/browser/navigation_entry.h" |
| 32 #include "content/public/browser/web_contents.h" |
31 #include "grit/browser_resources.h" | 33 #include "grit/browser_resources.h" |
32 #include "grit/chromium_strings.h" | 34 #include "grit/chromium_strings.h" |
33 #include "grit/generated_resources.h" | 35 #include "grit/generated_resources.h" |
34 #include "grit/locale_settings.h" | 36 #include "grit/locale_settings.h" |
35 #include "net/base/escape.h" | 37 #include "net/base/escape.h" |
36 #include "ui/base/resource/resource_bundle.h" | 38 #include "ui/base/resource/resource_bundle.h" |
37 | 39 |
38 #if defined(OS_CHROMEOS) | 40 #if defined(OS_CHROMEOS) |
39 #include "base/file_util.h" | 41 #include "base/file_util.h" |
40 #include "base/path_service.h" | 42 #include "base/path_service.h" |
41 #include "base/synchronization/waitable_event.h" | 43 #include "base/synchronization/waitable_event.h" |
42 #include "chrome/browser/chromeos/cros/cros_library.h" | 44 #include "chrome/browser/chromeos/cros/cros_library.h" |
43 #include "chrome/browser/chromeos/login/user_manager.h" | 45 #include "chrome/browser/chromeos/login/user_manager.h" |
44 #include "chrome/browser/chromeos/system/syslogs_provider.h" | 46 #include "chrome/browser/chromeos/system/syslogs_provider.h" |
45 #endif | 47 #endif |
46 | 48 |
47 using content::BrowserThread; | 49 using content::BrowserThread; |
| 50 using content::WebContents; |
48 | 51 |
49 namespace { | 52 namespace { |
50 | 53 |
51 const char kScreenshotBaseUrl[] = "chrome://screenshots/"; | 54 const char kScreenshotBaseUrl[] = "chrome://screenshots/"; |
52 const char kCurrentScreenshotUrl[] = "chrome://screenshots/current"; | 55 const char kCurrentScreenshotUrl[] = "chrome://screenshots/current"; |
53 #if defined(OS_CHROMEOS) | 56 #if defined(OS_CHROMEOS) |
54 const char kSavedScreenshotsUrl[] = "chrome://screenshots/saved/"; | 57 const char kSavedScreenshotsUrl[] = "chrome://screenshots/saved/"; |
55 const char kScreenshotPattern[] = "screenshot-*.png"; | 58 const char kScreenshotPattern[] = "screenshot-*.png"; |
56 | 59 |
57 const size_t kMaxSavedScreenshots = 2; | 60 const size_t kMaxSavedScreenshots = 2; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 return std::string(); | 104 return std::string(); |
102 else | 105 else |
103 return manager->logged_in_user().display_email(); | 106 return manager->logged_in_user().display_email(); |
104 } | 107 } |
105 #endif | 108 #endif |
106 | 109 |
107 // Returns the index of the feedback tab if already open, -1 otherwise | 110 // Returns the index of the feedback tab if already open, -1 otherwise |
108 int GetIndexOfFeedbackTab(Browser* browser) { | 111 int GetIndexOfFeedbackTab(Browser* browser) { |
109 GURL bug_report_url(chrome::kChromeUIBugReportURL); | 112 GURL bug_report_url(chrome::kChromeUIBugReportURL); |
110 for (int i = 0; i < browser->tab_count(); ++i) { | 113 for (int i = 0; i < browser->tab_count(); ++i) { |
111 TabContents* tab = browser->GetTabContentsAt(i); | 114 WebContents* tab = browser->GetTabContentsWrapperAt(i)->web_contents(); |
112 if (tab && tab->GetURL().GetWithEmptyPath() == bug_report_url) | 115 if (tab && tab->GetURL().GetWithEmptyPath() == bug_report_url) |
113 return i; | 116 return i; |
114 } | 117 } |
115 | 118 |
116 return -1; | 119 return -1; |
117 } | 120 } |
118 | 121 |
119 } // namespace | 122 } // namespace |
120 | 123 |
121 | 124 |
(...skipping 30 matching lines...) Expand all Loading... |
152 "&issueType=" + base::IntToString(issue_type); | 155 "&issueType=" + base::IntToString(issue_type); |
153 browser->ShowSingletonTab(GURL(bug_report_url)); | 156 browser->ShowSingletonTab(GURL(bug_report_url)); |
154 } | 157 } |
155 | 158 |
156 } // namespace browser | 159 } // namespace browser |
157 | 160 |
158 // The handler for Javascript messages related to the "bug report" dialog | 161 // The handler for Javascript messages related to the "bug report" dialog |
159 class BugReportHandler : public WebUIMessageHandler, | 162 class BugReportHandler : public WebUIMessageHandler, |
160 public base::SupportsWeakPtr<BugReportHandler> { | 163 public base::SupportsWeakPtr<BugReportHandler> { |
161 public: | 164 public: |
162 explicit BugReportHandler(TabContents* tab); | 165 explicit BugReportHandler(content::WebContents* tab); |
163 virtual ~BugReportHandler(); | 166 virtual ~BugReportHandler(); |
164 | 167 |
165 // Init work after Attach. Returns true on success. | 168 // Init work after Attach. Returns true on success. |
166 bool Init(); | 169 bool Init(); |
167 | 170 |
168 // WebUIMessageHandler implementation. | 171 // WebUIMessageHandler implementation. |
169 virtual void RegisterMessages() OVERRIDE; | 172 virtual void RegisterMessages() OVERRIDE; |
170 | 173 |
171 private: | 174 private: |
172 void HandleGetDialogDefaults(const ListValue* args); | 175 void HandleGetDialogDefaults(const ListValue* args); |
173 void HandleRefreshCurrentScreenshot(const ListValue* args); | 176 void HandleRefreshCurrentScreenshot(const ListValue* args); |
174 #if defined(OS_CHROMEOS) | 177 #if defined(OS_CHROMEOS) |
175 void HandleRefreshSavedScreenshots(const ListValue* args); | 178 void HandleRefreshSavedScreenshots(const ListValue* args); |
176 #endif | 179 #endif |
177 void HandleSendReport(const ListValue* args); | 180 void HandleSendReport(const ListValue* args); |
178 void HandleCancel(const ListValue* args); | 181 void HandleCancel(const ListValue* args); |
179 void HandleOpenSystemTab(const ListValue* args); | 182 void HandleOpenSystemTab(const ListValue* args); |
180 | 183 |
181 void SetupScreenshotsSource(); | 184 void SetupScreenshotsSource(); |
182 void ClobberScreenshotsSource(); | 185 void ClobberScreenshotsSource(); |
183 | 186 |
184 void CancelFeedbackCollection(); | 187 void CancelFeedbackCollection(); |
185 void CloseFeedbackTab(); | 188 void CloseFeedbackTab(); |
186 | 189 |
187 TabContents* tab_; | 190 WebContents* tab_; |
188 ScreenshotSource* screenshot_source_; | 191 ScreenshotSource* screenshot_source_; |
189 | 192 |
190 BugReportData* bug_report_data_; | 193 BugReportData* bug_report_data_; |
191 std::string target_tab_url_; | 194 std::string target_tab_url_; |
192 #if defined(OS_CHROMEOS) | 195 #if defined(OS_CHROMEOS) |
193 // Variables to track SyslogsProvider::RequestSyslogs callback. | 196 // Variables to track SyslogsProvider::RequestSyslogs callback. |
194 chromeos::system::SyslogsProvider::Handle syslogs_handle_; | 197 chromeos::system::SyslogsProvider::Handle syslogs_handle_; |
195 CancelableRequestConsumer syslogs_consumer_; | 198 CancelableRequestConsumer syslogs_consumer_; |
196 #endif | 199 #endif |
197 | 200 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 successful_init ? IDR_BUGREPORT_HTML : IDR_BUGREPORT_HTML_INVALID); | 303 successful_init ? IDR_BUGREPORT_HTML : IDR_BUGREPORT_HTML_INVALID); |
301 | 304 |
302 return source; | 305 return source; |
303 } | 306 } |
304 | 307 |
305 //////////////////////////////////////////////////////////////////////////////// | 308 //////////////////////////////////////////////////////////////////////////////// |
306 // | 309 // |
307 // BugReportHandler | 310 // BugReportHandler |
308 // | 311 // |
309 //////////////////////////////////////////////////////////////////////////////// | 312 //////////////////////////////////////////////////////////////////////////////// |
310 BugReportHandler::BugReportHandler(TabContents* tab) | 313 BugReportHandler::BugReportHandler(WebContents* tab) |
311 : tab_(tab), | 314 : tab_(tab), |
312 screenshot_source_(NULL), | 315 screenshot_source_(NULL), |
313 bug_report_data_(NULL) | 316 bug_report_data_(NULL) |
314 #if defined(OS_CHROMEOS) | 317 #if defined(OS_CHROMEOS) |
315 , syslogs_handle_(0) | 318 , syslogs_handle_(0) |
316 #endif | 319 #endif |
317 { | 320 { |
318 } | 321 } |
319 | 322 |
320 BugReportHandler::~BugReportHandler() { | 323 BugReportHandler::~BugReportHandler() { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 if (!base::StringToInt(params, &index)) | 371 if (!base::StringToInt(params, &index)) |
369 return false; | 372 return false; |
370 | 373 |
371 Browser* browser = BrowserList::GetLastActive(); | 374 Browser* browser = BrowserList::GetLastActive(); |
372 // Sanity checks. | 375 // Sanity checks. |
373 if (((index == 0) && (params != "0")) || !browser || | 376 if (((index == 0) && (params != "0")) || !browser || |
374 index >= browser->tab_count()) { | 377 index >= browser->tab_count()) { |
375 return false; | 378 return false; |
376 } | 379 } |
377 | 380 |
378 TabContents* target_tab = browser->GetTabContentsAt(index); | 381 WebContents* target_tab = |
| 382 browser->GetTabContentsWrapperAt(index)->web_contents(); |
379 if (target_tab) { | 383 if (target_tab) { |
380 target_tab_url_ = target_tab->GetURL().spec(); | 384 target_tab_url_ = target_tab->GetURL().spec(); |
381 } | 385 } |
382 | 386 |
383 // Setup the screenshot source after we've verified input is legit. | 387 // Setup the screenshot source after we've verified input is legit. |
384 SetupScreenshotsSource(); | 388 SetupScreenshotsSource(); |
385 | 389 |
386 return true; | 390 return true; |
387 } | 391 } |
388 | 392 |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 } else { | 609 } else { |
606 LOG(FATAL) << "Failed to get last active browser."; | 610 LOG(FATAL) << "Failed to get last active browser."; |
607 } | 611 } |
608 } | 612 } |
609 | 613 |
610 //////////////////////////////////////////////////////////////////////////////// | 614 //////////////////////////////////////////////////////////////////////////////// |
611 // | 615 // |
612 // BugReportUI | 616 // BugReportUI |
613 // | 617 // |
614 //////////////////////////////////////////////////////////////////////////////// | 618 //////////////////////////////////////////////////////////////////////////////// |
615 BugReportUI::BugReportUI(TabContents* tab) : HtmlDialogUI(tab) { | 619 BugReportUI::BugReportUI(WebContents* tab) : HtmlDialogUI(tab) { |
616 BugReportHandler* handler = new BugReportHandler(tab); | 620 BugReportHandler* handler = new BugReportHandler(tab); |
617 AddMessageHandler(handler); | 621 AddMessageHandler(handler); |
618 | 622 |
619 // The handler's init will determine whether we show the error html page. | 623 // The handler's init will determine whether we show the error html page. |
620 ChromeWebUIDataSource* html_source = | 624 ChromeWebUIDataSource* html_source = |
621 CreateBugReportUIHTMLSource(handler->Init()); | 625 CreateBugReportUIHTMLSource(handler->Init()); |
622 | 626 |
623 // Set up the chrome://bugreport/ source. | 627 // Set up the chrome://bugreport/ source. |
624 Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); | 628 Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext()); |
625 profile->GetChromeURLDataManager()->AddDataSource(html_source); | 629 profile->GetChromeURLDataManager()->AddDataSource(html_source); |
626 } | 630 } |
OLD | NEW |