summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/dom_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/views/dom_view.cc')
-rw-r--r--chrome/browser/ui/views/dom_view.cc87
1 files changed, 87 insertions, 0 deletions
diff --git a/chrome/browser/ui/views/dom_view.cc b/chrome/browser/ui/views/dom_view.cc
new file mode 100644
index 0000000..fde0636
--- /dev/null
+++ b/chrome/browser/ui/views/dom_view.cc
@@ -0,0 +1,87 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/dom_view.h"
+
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/renderer_preferences_util.h"
+#include "content/public/browser/site_instance.h"
+#include "content/public/browser/web_contents.h"
+#include "ui/views/focus/focus_manager.h"
+
+using content::SiteInstance;
+using content::WebContents;
+
+// static
+const char DOMView::kViewClassName[] =
+ "browser/ui/views/DOMView";
+
+DOMView::DOMView() : initialized_(false) {
+ set_focusable(true);
+}
+
+DOMView::~DOMView() {
+ if (native_view())
+ Detach();
+}
+
+std::string DOMView::GetClassName() const {
+ return kViewClassName;
+}
+
+bool DOMView::Init(Profile* profile, SiteInstance* instance) {
+ if (initialized_)
+ return true;
+
+ initialized_ = true;
+ WebContents* web_contents = CreateTabContents(profile, instance);
+ dom_contents_.reset(new TabContentsWrapper(web_contents));
+
+ renderer_preferences_util::UpdateFromSystemSettings(
+ web_contents->GetMutableRendererPrefs(), profile);
+
+ // Attach the native_view now if the view is already added to Widget.
+ if (GetWidget())
+ AttachTabContents();
+
+ return true;
+}
+
+WebContents* DOMView::CreateTabContents(Profile* profile,
+ SiteInstance* instance) {
+ return WebContents::Create(profile, instance, MSG_ROUTING_NONE, NULL, NULL);
+}
+
+void DOMView::LoadURL(const GURL& url) {
+ DCHECK(initialized_);
+ dom_contents_->web_contents()->GetController().LoadURL(
+ url, content::Referrer(), content::PAGE_TRANSITION_START_PAGE,
+ std::string());
+}
+
+bool DOMView::SkipDefaultKeyEventProcessing(const views::KeyEvent& e) {
+ // Don't move the focus to the next view when tab is pressed, we want the
+ // key event to be propagated to the render view for doing the tab traversal
+ // there.
+ return views::FocusManager::IsTabTraversalKeyEvent(e);
+}
+
+void DOMView::OnFocus() {
+ dom_contents_->web_contents()->Focus();
+}
+
+void DOMView::ViewHierarchyChanged(bool is_add, views::View* parent,
+ views::View* child) {
+ // Attach the native_view when this is added to Widget if
+ // the native view has not been attached yet and tab_contents_ exists.
+ views::NativeViewHost::ViewHierarchyChanged(is_add, parent, child);
+ if (is_add && GetWidget() && !native_view() && dom_contents_.get())
+ AttachTabContents();
+ else if (!is_add && child == this && native_view())
+ Detach();
+}
+
+void DOMView::AttachTabContents() {
+ Attach(dom_contents_->web_contents()->GetNativeView());
+}