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

Side by Side Diff: chrome/browser/translate/translate_infobar_delegate.cc

Issue 11644059: Change infobar creation to use a public static Create() method on the infobar delegate classes. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 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) 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/translate/translate_infobar_delegate.h" 5 #include "chrome/browser/translate/translate_infobar_delegate.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "chrome/browser/api/infobars/infobar_service.h" 10 #include "chrome/browser/api/infobars/infobar_service.h"
11 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/translate/translate_manager.h" 13 #include "chrome/browser/translate/translate_manager.h"
14 #include "chrome/browser/translate/translate_tab_helper.h" 14 #include "chrome/browser/translate/translate_tab_helper.h"
15 #include "content/public/browser/navigation_details.h" 15 #include "content/public/browser/navigation_details.h"
16 #include "content/public/browser/navigation_entry.h" 16 #include "content/public/browser/navigation_entry.h"
17 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
18 #include "grit/generated_resources.h" 18 #include "grit/generated_resources.h"
19 #include "grit/theme_resources.h" 19 #include "grit/theme_resources.h"
20 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
21 #include "ui/base/resource/resource_bundle.h" 21 #include "ui/base/resource/resource_bundle.h"
22 22
23 using content::NavigationEntry; 23 using content::NavigationEntry;
24 24
25 // static 25 // static
26 const size_t TranslateInfoBarDelegate::kNoIndex = static_cast<size_t>(-1); 26 const size_t TranslateInfoBarDelegate::kNoIndex = static_cast<size_t>(-1);
27 27
28 // static
29 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateDelegate(
30 Type infobar_type,
31 InfoBarService* infobar_service,
32 PrefService* prefs,
33 const std::string& original_language,
34 const std::string& target_language) {
35 DCHECK_NE(TRANSLATION_ERROR, infobar_type);
36 // These must be validated by our callers.
37 DCHECK(TranslateManager::IsSupportedLanguage(target_language));
38 // The original language can only be "unknown" for the "translating"
39 // infobar, which is the case when the user started a translation from the
40 // context menu.
41 DCHECK(TranslateManager::IsSupportedLanguage(original_language) ||
42 ((infobar_type == TRANSLATING) &&
43 (original_language == chrome::kUnknownLanguageCode)));
44 TranslateInfoBarDelegate* delegate =
45 new TranslateInfoBarDelegate(infobar_type,
46 TranslateErrors::NONE,
47 infobar_service,
48 prefs,
49 original_language,
50 target_language);
51 DCHECK_NE(kNoIndex, delegate->target_language_index());
52 return delegate;
53 }
54
55 TranslateInfoBarDelegate* TranslateInfoBarDelegate::CreateErrorDelegate(
56 TranslateErrors::Type error_type,
57 InfoBarService* infobar_service,
58 PrefService* prefs,
59 const std::string& original_language,
60 const std::string& target_language) {
61 return new TranslateInfoBarDelegate(TRANSLATION_ERROR,
62 error_type,
63 infobar_service,
64 prefs,
65 original_language,
66 target_language);
67 }
68
69 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() { 28 TranslateInfoBarDelegate::~TranslateInfoBarDelegate() {
70 } 29 }
71 30
31 // static
32 void TranslateInfoBarDelegate::Create(InfoBarService* infobar_service,
33 bool replace_existing_infobar,
34 Type infobar_type,
35 TranslateErrors::Type error_type,
36 PrefService* prefs,
37 const std::string& original_language,
38 const std::string& target_language) {
39 // Check preconditions.
40 if (infobar_type != TRANSLATION_ERROR) {
41 DCHECK(TranslateManager::IsSupportedLanguage(target_language));
42 if (!TranslateManager::IsSupportedLanguage(original_language)) {
43 // The original language can only be "unknown" for the "translating"
44 // infobar, which is the case when the user started a translation from the
45 // context menu.
46 DCHECK_EQ(TRANSLATING, infobar_type);
47 DCHECK_EQ(chrome::kUnknownLanguageCode, original_language);
48 }
49 }
50
51 // Find any existing translate infobar delegate.
52 TranslateInfoBarDelegate* old_delegate = NULL;
53 for (size_t i = 0; i < infobar_service->GetInfoBarCount(); ++i) {
54 old_delegate =
55 infobar_service->GetInfoBarDelegateAt(i)->AsTranslateInfoBarDelegate();
56 if (old_delegate)
57 break;
58 }
59
60 // Create the new delegate.
61 scoped_ptr<TranslateInfoBarDelegate> infobar(
62 new TranslateInfoBarDelegate(infobar_type, error_type, infobar_service,
63 prefs, original_language, target_language));
64 infobar->UpdateBackgroundAnimation(old_delegate);
65
66 // Add the new delegate if necessary.
67 if (!old_delegate) {
68 infobar_service->AddInfoBar(infobar.PassAs<InfoBarDelegate>());
69 } else if (replace_existing_infobar) {
70 infobar_service->ReplaceInfoBar(old_delegate,
71 infobar.PassAs<InfoBarDelegate>());
72 }
73 }
74
72 void TranslateInfoBarDelegate::Translate() { 75 void TranslateInfoBarDelegate::Translate() {
73 if (!owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord()) { 76 if (!owner()->GetWebContents()->GetBrowserContext()->IsOffTheRecord()) {
74 prefs_.ResetTranslationDeniedCount(original_language_code()); 77 prefs_.ResetTranslationDeniedCount(original_language_code());
75 prefs_.IncrementTranslationAcceptedCount(original_language_code()); 78 prefs_.IncrementTranslationAcceptedCount(original_language_code());
76 } 79 }
77 80
78 TranslateManager::GetInstance()->TranslatePage(owner()->GetWebContents(), 81 TranslateManager::GetInstance()->TranslatePage(owner()->GetWebContents(),
79 original_language_code(), 82 original_language_code(),
80 target_language_code()); 83 target_language_code());
81 84
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 TranslateInfoBarDelegate* 360 TranslateInfoBarDelegate*
358 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() { 361 TranslateInfoBarDelegate::AsTranslateInfoBarDelegate() {
359 return this; 362 return this;
360 } 363 }
361 364
362 std::string TranslateInfoBarDelegate::GetPageHost() { 365 std::string TranslateInfoBarDelegate::GetPageHost() {
363 NavigationEntry* entry = 366 NavigationEntry* entry =
364 owner()->GetWebContents()->GetController().GetActiveEntry(); 367 owner()->GetWebContents()->GetController().GetActiveEntry();
365 return entry ? entry->GetURL().HostNoBrackets() : std::string(); 368 return entry ? entry->GetURL().HostNoBrackets() : std::string();
366 } 369 }
OLDNEW
« no previous file with comments | « chrome/browser/translate/translate_infobar_delegate.h ('k') | chrome/browser/translate/translate_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698