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

Unified Diff: chrome/browser/extensions/extension_view.cc

Issue 92043: Refactor ExtensionView to support a UI-less extension instance.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/extension_view.h ('k') | chrome/browser/extensions/extension_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_view.cc
===================================================================
--- chrome/browser/extensions/extension_view.cc (revision 14851)
+++ chrome/browser/extensions/extension_view.cc (working copy)
@@ -4,68 +4,68 @@
#include "chrome/browser/extensions/extension_view.h"
-#include "base/command_line.h"
-#include "chrome/browser/browser.h"
-#include "chrome/browser/character_encoding.h"
-#include "chrome/browser/extensions/extension.h"
-#include "chrome/browser/extensions/extension_message_service.h"
-#include "chrome/browser/jsmessage_box_handler.h"
-#include "chrome/browser/profile.h"
+#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/renderer_host/render_view_host.h"
-#include "chrome/browser/renderer_host/render_process_host.h"
-#include "chrome/browser/renderer_host/render_widget_host.h"
#include "chrome/browser/renderer_host/render_widget_host_view.h"
-#include "chrome/browser/tab_contents/site_instance.h"
-#include "chrome/browser/tab_contents/web_contents.h"
-#include "chrome/browser/tab_contents/tab_contents_view.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/common/pref_service.h"
-#include "chrome/common/resource_bundle.h"
+#include "chrome/views/widget/widget.h"
-#include "grit/browser_resources.h"
-#include "grit/generated_resources.h"
+#if defined(OS_WIN)
+#include "chrome/browser/renderer_host/render_widget_host_view_win.h"
+#endif
-#include "webkit/glue/context_menu.h"
+ExtensionView::ExtensionView(ExtensionHost* host, Browser* browser,
+ const GURL& content_url)
+ : host_(host), browser_(browser), content_url_(content_url),
+ initialized_(false) {
+ host_->set_view(this);
+}
-ExtensionView::ExtensionView(Extension* extension,
- const GURL& url,
- SiteInstance* instance,
- Browser* browser)
- : HWNDHtmlView(url, this, false, instance),
- extension_(extension),
- browser_(browser),
- did_stop_loading_(false),
- pending_preferred_width_(0) {
+ExtensionView::~ExtensionView() {
+ if (GetHWND())
+ Detach();
}
-ExtensionFunctionDispatcher* ExtensionView::
- CreateExtensionFunctionDispatcher(RenderViewHost *render_view_host,
- const std::string& extension_id) {
- return new ExtensionFunctionDispatcher(render_view_host, browser_,
- extension_id);
+void ExtensionView::SetVisible(bool is_visible) {
+ HWNDView::SetVisible(is_visible);
+
+ // Also tell RenderWidgetHostView the new visibility. Despite its name, it is
+ // not part of the View heirarchy and does not know about the change unless we
+ // tell it.
+ if (render_view_host()->view()) {
+ if (is_visible)
+ render_view_host()->view()->Show();
+ else
+ render_view_host()->view()->Hide();
+ }
}
+void ExtensionView::DidChangeBounds(const gfx::Rect& previous,
+ const gfx::Rect& current) {
+ // Propagate the new size to RenderWidgetHostView.
+ // We can't send size zero because RenderWidget DCHECKs that.
+ if (render_view_host()->view() && !current.IsEmpty())
+ render_view_host()->view()->SetSize(gfx::Size(width(), height()));
+}
+
void ExtensionView::ShowIfCompletelyLoaded() {
// We wait to show the ExtensionView until it has loaded and our parent has
// given us a background. These can happen in different orders.
- if (did_stop_loading_ && !render_view_host()->view()->background().empty()) {
+ if (host_->did_stop_loading() && render_view_host()->view() &&
+ !render_view_host()->view()->background().empty()) {
SetVisible(true);
DidContentsPreferredWidthChange(pending_preferred_width_);
}
}
void ExtensionView::SetBackground(const SkBitmap& background) {
- HWNDHtmlView::SetBackground(background);
+ if (initialized_ && render_view_host()->view()) {
+ render_view_host()->view()->SetBackground(background);
+ } else {
+ pending_background_ = background;
+ }
ShowIfCompletelyLoaded();
}
-void ExtensionView::DidStopLoading(RenderViewHost* render_view_host) {
- render_view_host->WasResized();
- did_stop_loading_ = true;
- ShowIfCompletelyLoaded();
-}
-
void ExtensionView::DidContentsPreferredWidthChange(const int pref_width) {
// Don't actually do anything with this information until we have been shown.
// Size changes will not be honored by lower layers while we are hidden.
@@ -87,97 +87,37 @@
}
}
-void ExtensionView::CreatingRenderer() {
- render_view_host()->AllowExtensionBindings();
- SetVisible(false);
-}
+void ExtensionView::ViewHierarchyChanged(bool is_add,
+ views::View *parent,
+ views::View *child) {
+ if (is_add && GetWidget() && !initialized_) {
+ initialized_ = true;
-void ExtensionView::RenderViewCreated(RenderViewHost* rvh) {
- URLRequestContext* context = rvh->process()->profile()->GetRequestContext();
- ExtensionMessageService::GetInstance(context)->RegisterExtension(
- extension_->id(), render_view_host()->process()->pid());
-}
+ RenderWidgetHostView* view = RenderWidgetHostView::CreateViewForWidget(
+ render_view_host());
-WebPreferences ExtensionView::GetWebkitPrefs() {
- PrefService* prefs = render_view_host()->process()->profile()->GetPrefs();
- bool isDomUI = true;
- return RenderViewHostDelegateHelper::GetWebkitPrefs(prefs, isDomUI);
-}
+ // TODO(mpcomplete): RWHV needs a cross-platform Init function.
+#if defined(OS_WIN)
+ // Create the HWND. Note:
+ // RenderWidgetHostHWND supports windowed plugins, but if we ever also
+ // wanted to support constrained windows with this, we would need an
+ // additional HWND to parent off of because windowed plugin HWNDs cannot
+ // exist in the same z-order as constrained windows.
+ RenderWidgetHostViewWin* view_win =
+ static_cast<RenderWidgetHostViewWin*>(view);
+ HWND hwnd = view_win->Create(GetWidget()->GetNativeView());
+ view_win->ShowWindow(SW_SHOW);
+ Attach(hwnd);
+#else
+ NOTIMPLEMENTED();
+#endif
-void ExtensionView::RunJavaScriptMessage(
- const std::wstring& message,
- const std::wstring& default_prompt,
- const GURL& frame_url,
- const int flags,
- IPC::Message* reply_msg,
- bool* did_suppress_message) {
- // Automatically cancel the javascript alert (otherwise the renderer hangs
- // indefinitely).
- *did_suppress_message = true;
- render_view_host()->JavaScriptMessageBoxClosed(reply_msg, true, L"");
-}
+ host_->CreateRenderView(content_url_, view);
+ SetVisible(false);
-void ExtensionView::DidStartLoading(RenderViewHost* render_view_host) {
- static const StringPiece toolstrip_css(
- ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_EXTENSIONS_TOOLSTRIP_CSS));
- render_view_host->InsertCSSInWebFrame(L"", toolstrip_css.as_string());
-}
-
-RenderViewHostDelegate::View* ExtensionView::GetViewDelegate() const {
- // TODO(erikkay) this is unfortunate. The interface declares that this method
- // must be const (no good reason for it as far as I can tell) which means you
- // can't return self without doing this const_cast. Either we need to change
- // the interface, or we need to split out the view delegate into another
- // object (which is how WebContents works).
- return const_cast<ExtensionView*>(this);
-}
-
-void ExtensionView::CreateNewWindow(int route_id,
- base::WaitableEvent* modal_dialog_event) {
- delegate_view_helper_.CreateNewWindow(route_id, modal_dialog_event,
- browser_->profile(), site_instance());
-}
-
-void ExtensionView::CreateNewWidget(int route_id, bool activatable) {
- delegate_view_helper_.CreateNewWidget(route_id, activatable,
- site_instance()->GetProcess());
-}
-
-void ExtensionView::ShowCreatedWindow(int route_id,
- WindowOpenDisposition disposition,
- const gfx::Rect& initial_pos,
- bool user_gesture) {
- WebContents* contents = delegate_view_helper_.GetCreatedWindow(route_id);
- if (contents) {
- browser_->AddTabContents(contents, disposition, initial_pos, user_gesture);
+ if (!pending_background_.empty()) {
+ render_view_host()->view()->SetBackground(pending_background_);
+ pending_background_.reset();
+ }
}
}
-
-void ExtensionView::ShowCreatedWidget(int route_id,
- const gfx::Rect& initial_pos) {
- RenderWidgetHostView* widget_host_view =
- delegate_view_helper_.GetCreatedWidget(route_id);
- browser_->BrowserRenderWidgetShowing();
- // TODO(erikkay): These two lines could be refactored with TabContentsView.
- widget_host_view->InitAsPopup(render_view_host()->view(),
- initial_pos);
- widget_host_view->GetRenderWidgetHost()->Init();
-}
-
-void ExtensionView::ShowContextMenu(const ContextMenuParams& params) {
- // TODO(erikkay) - This is a temporary hack. Show a menu here instead.
- render_view_host()->InspectElementAt(params.x, params.y);
-}
-
-void ExtensionView::StartDragging(const WebDropData& drop_data) {
-}
-
-void ExtensionView::UpdateDragCursor(bool is_drop_target) {
-}
-
-void ExtensionView::TakeFocus(bool reverse) {
-}
-
-void ExtensionView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
-}
« no previous file with comments | « chrome/browser/extensions/extension_view.h ('k') | chrome/browser/extensions/extension_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698