OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/feedback_ui.h" | 5 #include "chrome/browser/ui/webui/feedback_ui.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 // for this functionality since we need to make *sure* we never get | 196 // for this functionality since we need to make *sure* we never get |
197 // instantiated again while we are open - with singleton tabs, that can | 197 // instantiated again while we are open - with singleton tabs, that can |
198 // happen). | 198 // happen). |
199 int feedback_tab_index = GetIndexOfFeedbackTab(browser); | 199 int feedback_tab_index = GetIndexOfFeedbackTab(browser); |
200 if (feedback_tab_index >= 0) { | 200 if (feedback_tab_index >= 0) { |
201 // Do not refresh screenshot, do not create a new tab. | 201 // Do not refresh screenshot, do not create a new tab. |
202 browser->tab_strip_model()->ActivateTabAt(feedback_tab_index, true); | 202 browser->tab_strip_model()->ActivateTabAt(feedback_tab_index, true); |
203 return; | 203 return; |
204 } | 204 } |
205 | 205 |
206 std::vector<unsigned char>* last_screenshot_png = | 206 if (category_tag != kAppLauncherCategoryTag) { |
207 FeedbackUtil::GetScreenshotPng(); | 207 std::vector<unsigned char>* last_screenshot_png = |
208 last_screenshot_png->clear(); | 208 FeedbackUtil::GetScreenshotPng(); |
| 209 last_screenshot_png->clear(); |
209 | 210 |
210 gfx::NativeWindow native_window; | 211 gfx::NativeWindow native_window; |
211 gfx::Rect snapshot_bounds; | 212 gfx::Rect snapshot_bounds; |
212 | 213 |
213 #if defined(OS_CHROMEOS) | 214 #if defined(OS_CHROMEOS) |
214 // For ChromeOS, don't use the browser window but the root window | 215 // For ChromeOS, don't use the browser window but the root window |
215 // instead to grab the screenshot. We want everything on the screen, not | 216 // instead to grab the screenshot. We want everything on the screen, not |
216 // just the current browser. | 217 // just the current browser. |
217 native_window = ash::Shell::GetPrimaryRootWindow(); | 218 native_window = ash::Shell::GetPrimaryRootWindow(); |
218 snapshot_bounds = gfx::Rect(native_window->bounds()); | 219 snapshot_bounds = gfx::Rect(native_window->bounds()); |
219 #else | 220 #else |
220 native_window = browser->window()->GetNativeWindow(); | 221 native_window = browser->window()->GetNativeWindow(); |
221 snapshot_bounds = gfx::Rect(browser->window()->GetBounds().size()); | 222 snapshot_bounds = gfx::Rect(browser->window()->GetBounds().size()); |
222 #endif | 223 #endif |
223 bool success = chrome::GrabWindowSnapshotForUser(native_window, | 224 bool success = chrome::GrabWindowSnapshotForUser(native_window, |
224 last_screenshot_png, | 225 last_screenshot_png, |
225 snapshot_bounds); | 226 snapshot_bounds); |
226 FeedbackUtil::SetScreenshotSize(success ? snapshot_bounds : gfx::Rect()); | 227 FeedbackUtil::SetScreenshotSize(success ? snapshot_bounds : gfx::Rect()); |
227 | 228 } |
228 std::string feedback_url = std::string(chrome::kChromeUIFeedbackURL) + "?" + | 229 std::string feedback_url = std::string(chrome::kChromeUIFeedbackURL) + "?" + |
229 kSessionIDParameter + base::IntToString(browser->session_id().id()) + | 230 kSessionIDParameter + base::IntToString(browser->session_id().id()) + |
230 "&" + kTabIndexParameter + | 231 "&" + kTabIndexParameter + |
231 base::IntToString(browser->tab_strip_model()->active_index()) + | 232 base::IntToString(browser->tab_strip_model()->active_index()) + |
232 "&" + kDescriptionParameter + | 233 "&" + kDescriptionParameter + |
233 net::EscapeUrlEncodedData(description_template, false) + "&" + | 234 net::EscapeUrlEncodedData(description_template, false) + "&" + |
234 kCategoryTagParameter + net::EscapeUrlEncodedData(category_tag, false); | 235 kCategoryTagParameter + net::EscapeUrlEncodedData(category_tag, false); |
235 | 236 |
236 #if defined(OS_CHROMEOS) | 237 #if defined(OS_CHROMEOS) |
237 feedback_url = feedback_url + "&" + kTimestampParameter + | 238 feedback_url = feedback_url + "&" + kTimestampParameter + |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 void SetupScreenshotsSource(); | 276 void SetupScreenshotsSource(); |
276 void ClobberScreenshotsSource(); | 277 void ClobberScreenshotsSource(); |
277 | 278 |
278 void CloseFeedbackTab(); | 279 void CloseFeedbackTab(); |
279 | 280 |
280 WebContents* tab_; | 281 WebContents* tab_; |
281 ScreenshotSource* screenshot_source_; | 282 ScreenshotSource* screenshot_source_; |
282 | 283 |
283 scoped_refptr<FeedbackData> feedback_data_; | 284 scoped_refptr<FeedbackData> feedback_data_; |
284 std::string target_tab_url_; | 285 std::string target_tab_url_; |
| 286 std::string category_tag_; |
285 #if defined(OS_CHROMEOS) | 287 #if defined(OS_CHROMEOS) |
286 // Timestamp of when the feedback request was initiated. | 288 // Timestamp of when the feedback request was initiated. |
287 std::string timestamp_; | 289 std::string timestamp_; |
288 #endif | 290 #endif |
289 | 291 |
290 DISALLOW_COPY_AND_ASSIGN(FeedbackHandler); | 292 DISALLOW_COPY_AND_ASSIGN(FeedbackHandler); |
291 }; | 293 }; |
292 | 294 |
293 content::WebUIDataSource* CreateFeedbackUIHTMLSource(bool successful_init) { | 295 content::WebUIDataSource* CreateFeedbackUIHTMLSource(bool successful_init) { |
294 content::WebUIDataSource* source = | 296 content::WebUIDataSource* source = |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 source->AddLocalizedString("noscreenshot", | 332 source->AddLocalizedString("noscreenshot", |
331 IDS_FEEDBACK_INCLUDE_NO_SCREENSHOT); | 333 IDS_FEEDBACK_INCLUDE_NO_SCREENSHOT); |
332 | 334 |
333 source->AddLocalizedString("send-report", IDS_FEEDBACK_SEND_REPORT); | 335 source->AddLocalizedString("send-report", IDS_FEEDBACK_SEND_REPORT); |
334 source->AddLocalizedString("cancel", IDS_CANCEL); | 336 source->AddLocalizedString("cancel", IDS_CANCEL); |
335 | 337 |
336 source->AddLocalizedString("no-description", IDS_FEEDBACK_NO_DESCRIPTION); | 338 source->AddLocalizedString("no-description", IDS_FEEDBACK_NO_DESCRIPTION); |
337 source->AddLocalizedString("no-saved-screenshots", | 339 source->AddLocalizedString("no-saved-screenshots", |
338 IDS_FEEDBACK_NO_SAVED_SCREENSHOTS_HELP); | 340 IDS_FEEDBACK_NO_SAVED_SCREENSHOTS_HELP); |
339 source->AddLocalizedString("privacy-note", IDS_FEEDBACK_PRIVACY_NOTE); | 341 source->AddLocalizedString("privacy-note", IDS_FEEDBACK_PRIVACY_NOTE); |
| 342 source->AddLocalizedString("launcher-title", IDS_FEEDBACK_LAUNCHER_TITLE); |
| 343 source->AddLocalizedString("launcher-description", |
| 344 IDS_FEEDBACK_LAUNCHER_DESCRIPTION_LABEL); |
340 | 345 |
341 source->SetJsonPath("strings.js"); | 346 source->SetJsonPath("strings.js"); |
342 source->AddResourcePath("feedback.js", IDR_FEEDBACK_JS); | 347 source->AddResourcePath("feedback.js", IDR_FEEDBACK_JS); |
343 source->SetDefaultResource( | 348 source->SetDefaultResource( |
344 successful_init ? IDR_FEEDBACK_HTML : IDR_FEEDBACK_HTML_INVALID); | 349 successful_init ? IDR_FEEDBACK_HTML : IDR_FEEDBACK_HTML_INVALID); |
345 | 350 |
346 return source; | 351 return source; |
347 } | 352 } |
348 | 353 |
349 //////////////////////////////////////////////////////////////////////////////// | 354 //////////////////////////////////////////////////////////////////////////////// |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 std::string custom_page_url; | 405 std::string custom_page_url; |
401 if (Tokenize(query, std::string("&"), ¶ms)) { | 406 if (Tokenize(query, std::string("&"), ¶ms)) { |
402 for (std::vector<std::string>::iterator it = params.begin(); | 407 for (std::vector<std::string>::iterator it = params.begin(); |
403 it != params.end(); ++it) { | 408 it != params.end(); ++it) { |
404 std::string query_str = *it; | 409 std::string query_str = *it; |
405 if (StartsWithASCII(query_str, std::string(kSessionIDParameter), true)) { | 410 if (StartsWithASCII(query_str, std::string(kSessionIDParameter), true)) { |
406 ReplaceFirstSubstringAfterOffset( | 411 ReplaceFirstSubstringAfterOffset( |
407 &query_str, 0, kSessionIDParameter, ""); | 412 &query_str, 0, kSessionIDParameter, ""); |
408 if (!base::StringToInt(query_str, &session_id)) | 413 if (!base::StringToInt(query_str, &session_id)) |
409 return false; | 414 return false; |
410 continue; | 415 } else if (StartsWithASCII(*it, std::string(kTabIndexParameter), true)) { |
411 } | |
412 if (StartsWithASCII(*it, std::string(kTabIndexParameter), true)) { | |
413 ReplaceFirstSubstringAfterOffset( | 416 ReplaceFirstSubstringAfterOffset( |
414 &query_str, 0, kTabIndexParameter, ""); | 417 &query_str, 0, kTabIndexParameter, ""); |
415 if (!base::StringToInt(query_str, &index)) | 418 if (!base::StringToInt(query_str, &index)) |
416 return false; | 419 return false; |
417 continue; | 420 } else if (StartsWithASCII(*it, std::string(kCustomPageUrlParameter), |
418 } | 421 true)) { |
419 if (StartsWithASCII(*it, std::string(kCustomPageUrlParameter), true)) { | |
420 ReplaceFirstSubstringAfterOffset( | 422 ReplaceFirstSubstringAfterOffset( |
421 &query_str, 0, kCustomPageUrlParameter, ""); | 423 &query_str, 0, kCustomPageUrlParameter, ""); |
422 custom_page_url = query_str; | 424 custom_page_url = query_str; |
423 continue; | 425 } else if (StartsWithASCII(*it, std::string(kCategoryTagParameter), |
424 } | 426 true)) { |
| 427 ReplaceFirstSubstringAfterOffset( |
| 428 &query_str, 0, kCategoryTagParameter, ""); |
| 429 category_tag_ = query_str; |
425 #if defined(OS_CHROMEOS) | 430 #if defined(OS_CHROMEOS) |
426 if (StartsWithASCII(*it, std::string(kTimestampParameter), true)) { | 431 } else if (StartsWithASCII(*it, std::string(kTimestampParameter), true)) { |
427 ReplaceFirstSubstringAfterOffset( | 432 ReplaceFirstSubstringAfterOffset( |
428 &query_str, 0, kTimestampParameter, ""); | 433 &query_str, 0, kTimestampParameter, ""); |
429 timestamp_ = query_str; | 434 timestamp_ = query_str; |
430 continue; | 435 #endif |
431 } | 436 } |
432 #endif | |
433 } | 437 } |
434 } | 438 } |
435 | 439 |
436 // If we don't have a page url specified, get it from the tab index. | 440 // If we don't have a page url specified, get it from the tab index. |
437 if (custom_page_url.empty()) { | 441 if (custom_page_url.empty()) { |
438 if (session_id == -1) | 442 if (session_id == -1) |
439 return false; | 443 return false; |
440 | 444 |
441 Browser* browser = chrome::FindBrowserWithID(session_id); | 445 Browser* browser = chrome::FindBrowserWithID(session_id); |
442 // Sanity checks. | 446 // Sanity checks. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 base::Bind(&FeedbackHandler::HandleOpenSystemTab, | 487 base::Bind(&FeedbackHandler::HandleOpenSystemTab, |
484 base::Unretained(this))); | 488 base::Unretained(this))); |
485 } | 489 } |
486 | 490 |
487 void FeedbackHandler::HandleGetDialogDefaults(const ListValue*) { | 491 void FeedbackHandler::HandleGetDialogDefaults(const ListValue*) { |
488 feedback_data_ = new FeedbackData(); | 492 feedback_data_ = new FeedbackData(); |
489 | 493 |
490 // Send back values which the dialog js needs initially. | 494 // Send back values which the dialog js needs initially. |
491 DictionaryValue dialog_defaults; | 495 DictionaryValue dialog_defaults; |
492 | 496 |
| 497 if (category_tag_ == chrome::kAppLauncherCategoryTag) |
| 498 dialog_defaults.SetBoolean("launcherFeedback", true); |
| 499 |
493 // Current url. | 500 // Current url. |
494 dialog_defaults.SetString("currentUrl", target_tab_url_); | 501 dialog_defaults.SetString("currentUrl", target_tab_url_); |
495 | 502 |
496 // Are screenshots disabled? | 503 // Are screenshots disabled? |
497 dialog_defaults.SetBoolean( | 504 dialog_defaults.SetBoolean( |
498 "disableScreenshots", | 505 "disableScreenshots", |
499 g_browser_process->local_state()->GetBoolean(prefs::kDisableScreenshots)); | 506 g_browser_process->local_state()->GetBoolean(prefs::kDisableScreenshots)); |
500 | 507 |
501 // User e-mail | 508 // User e-mail |
502 std::string user_email = GetUserEmail(); | 509 std::string user_email = GetUserEmail(); |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 screenshot_filepaths.begin() + sort_size, | 719 screenshot_filepaths.begin() + sort_size, |
713 screenshot_filepaths.end(), | 720 screenshot_filepaths.end(), |
714 ScreenshotTimestampComp); | 721 ScreenshotTimestampComp); |
715 for (size_t i = 0; i < sort_size; ++i) | 722 for (size_t i = 0; i < sort_size; ++i) |
716 saved_screenshots->push_back( | 723 saved_screenshots->push_back( |
717 std::string(ScreenshotSource::kScreenshotUrlRoot) + | 724 std::string(ScreenshotSource::kScreenshotUrlRoot) + |
718 std::string(ScreenshotSource::kScreenshotSaved) + | 725 std::string(ScreenshotSource::kScreenshotSaved) + |
719 screenshot_filepaths[i]); | 726 screenshot_filepaths[i]); |
720 } | 727 } |
721 #endif | 728 #endif |
OLD | NEW |