Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / translate / translate_bubble_view.cc
index a22b4da..90588a9 100644 (file)
 #include "chrome/browser/ui/chrome_pages.h"
 #include "chrome/browser/ui/translate/translate_bubble_model_impl.h"
 #include "chrome/common/url_constants.h"
+#include "chrome/grit/generated_resources.h"
 #include "components/translate/core/browser/translate_download_manager.h"
 #include "components/translate/core/browser/translate_manager.h"
 #include "components/translate/core/browser/translate_ui_delegate.h"
 #include "content/public/browser/web_contents.h"
-#include "grit/generated_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/combobox_model.h"
 #include "ui/base/models/simple_combobox_model.h"
-#include "ui/base/resource/resource_bundle.h"
 #include "ui/views/controls/button/checkbox.h"
 #include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/combobox/combobox.h"
@@ -80,10 +79,12 @@ TranslateBubbleView::~TranslateBubbleView() {
 }
 
 // static
-void TranslateBubbleView::ShowBubble(views::View* anchor_view,
-                                     content::WebContents* web_contents,
-                                     translate::TranslateStep step,
-                                     TranslateErrors::Type error_type) {
+void TranslateBubbleView::ShowBubble(
+    views::View* anchor_view,
+    content::WebContents* web_contents,
+    translate::TranslateStep step,
+    translate::TranslateErrors::Type error_type,
+    bool is_user_gesture) {
   if (IsShowing()) {
     // When the user reads the advanced setting panel, the bubble should not be
     // changed because he/she is focusing on the bubble.
@@ -100,6 +101,11 @@ void TranslateBubbleView::ShowBubble(views::View* anchor_view,
       translate_bubble_view_->SwitchToErrorView(error_type);
     }
     return;
+  } else {
+    if (step == translate::TRANSLATE_STEP_AFTER_TRANSLATE &&
+        !is_user_gesture) {
+      return;
+    }
   }
 
   std::string source_language;
@@ -107,18 +113,30 @@ void TranslateBubbleView::ShowBubble(views::View* anchor_view,
   ChromeTranslateClient::GetTranslateLanguages(
       web_contents, &source_language, &target_language);
 
-  scoped_ptr<TranslateUIDelegate> ui_delegate(new TranslateUIDelegate(
-      ChromeTranslateClient::GetManagerFromWebContents(web_contents)
-          ->GetWeakPtr(),
-      source_language,
-      target_language));
+  scoped_ptr<translate::TranslateUIDelegate> ui_delegate(
+      new translate::TranslateUIDelegate(
+          ChromeTranslateClient::GetManagerFromWebContents(web_contents)
+              ->GetWeakPtr(),
+          source_language,
+          target_language));
   scoped_ptr<TranslateBubbleModel> model(
       new TranslateBubbleModelImpl(step, ui_delegate.Pass()));
   TranslateBubbleView* view = new TranslateBubbleView(anchor_view,
                                                       model.Pass(),
                                                       error_type,
                                                       web_contents);
-  views::BubbleDelegateView::CreateBubble(view)->Show();
+  if (is_user_gesture)
+    views::BubbleDelegateView::CreateBubble(view)->Show();
+  else
+    views::BubbleDelegateView::CreateBubble(view)->ShowInactive();
+}
+
+// static
+void TranslateBubbleView::CloseBubble() {
+  if (!IsShowing())
+    return;
+
+  translate_bubble_view_->GetWidget()->Close();
 }
 
 // static
@@ -238,7 +256,7 @@ TranslateBubbleModel::ViewState TranslateBubbleView::GetViewState() const {
 TranslateBubbleView::TranslateBubbleView(
     views::View* anchor_view,
     scoped_ptr<TranslateBubbleModel> model,
-    TranslateErrors::Type error_type,
+    translate::TranslateErrors::Type error_type,
     content::WebContents* web_contents)
     : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
       WebContentsObserver(web_contents),
@@ -256,8 +274,8 @@ TranslateBubbleView::TranslateBubbleView(
       model_(model.Pass()),
       error_type_(error_type),
       is_in_incognito_window_(
-          web_contents ?
-          web_contents->GetBrowserContext()->IsOffTheRecord() : false),
+          web_contents ? web_contents->GetBrowserContext()->IsOffTheRecord()
+                       : false),
       translate_executed_(false),
       denial_button_clicked_(false) {
   if (model_->GetViewState() !=
@@ -718,7 +736,8 @@ void TranslateBubbleView::SwitchView(
   SizeToContents();
 }
 
-void TranslateBubbleView::SwitchToErrorView(TranslateErrors::Type error_type) {
+void TranslateBubbleView::SwitchToErrorView(
+    translate::TranslateErrors::Type error_type) {
   SwitchView(TranslateBubbleModel::VIEW_STATE_ERROR);
   error_type_ = error_type;
   model_->ShowError(error_type);