| Index: chrome/browser/ui/panels/panel.cc | 
| diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc | 
| index 6505b0b1a639862b47144a29eb337131121775d1..90f4ded2cef105fd4aa850791d8110303d52c14d 100644 | 
| --- a/chrome/browser/ui/panels/panel.cc | 
| +++ b/chrome/browser/ui/panels/panel.cc | 
| @@ -23,11 +23,13 @@ | 
| #include "content/public/browser/notification_source.h" | 
| #include "content/public/browser/notification_types.h" | 
| #include "content/public/browser/render_view_host.h" | 
| +#include "content/public/browser/user_metrics.h" | 
| #include "content/public/browser/web_contents.h" | 
| #include "third_party/skia/include/core/SkBitmap.h" | 
| #include "ui/gfx/rect.h" | 
|  | 
| using content::RenderViewHost; | 
| +using content::UserMetricsAction; | 
|  | 
| namespace panel_internal { | 
|  | 
| @@ -317,6 +319,10 @@ gfx::Size Panel::ClampSize(const gfx::Size& size) const { | 
| return gfx::Size(new_width, new_height); | 
| } | 
|  | 
| +void Panel::HandleKeyboardEvent(const content::NativeWebKeyboardEvent& event) { | 
| +  native_panel_->HandlePanelKeyboardEvent(event); | 
| +} | 
| + | 
| void Panel::SetAlwaysOnTop(bool on_top) { | 
| if (always_on_top_ == on_top) | 
| return; | 
| @@ -520,8 +526,42 @@ void Panel::ExecuteCommandWithDisposition(int id, | 
| DCHECK(command_updater_.IsCommandEnabled(id)) << "Invalid/disabled command " | 
| << id; | 
| switch (id) { | 
| -    case IDC_RELOAD:    // etc | 
| -    // TODO(jennb): implement. | 
| +    // Navigation | 
| +    case IDC_RELOAD: | 
| +      panel_host_->Reload(); | 
| +      break; | 
| +    case IDC_RELOAD_IGNORING_CACHE: | 
| +      panel_host_->ReloadIgnoringCache(); | 
| +      break; | 
| +    case IDC_STOP: | 
| +      panel_host_->StopLoading(); | 
| +      break; | 
| + | 
| +    // Clipboard | 
| +    case IDC_COPY: | 
| +      content::RecordAction(UserMetricsAction("Copy")); | 
| +      native_panel_->PanelCopy(); | 
| +      break; | 
| +    case IDC_CUT: | 
| +      content::RecordAction(UserMetricsAction("Cut")); | 
| +      native_panel_->PanelCut(); | 
| +      break; | 
| +    case IDC_PASTE: | 
| +      content::RecordAction(UserMetricsAction("Paste")); | 
| +      native_panel_->PanelPaste(); | 
| +      break; | 
| + | 
| +    // Zoom | 
| +    case IDC_ZOOM_PLUS: | 
| +      panel_host_->Zoom(content::PAGE_ZOOM_IN); | 
| +      break; | 
| +    case IDC_ZOOM_NORMAL: | 
| +      panel_host_->Zoom(content::PAGE_ZOOM_RESET); | 
| +      break; | 
| +    case IDC_ZOOM_MINUS: | 
| +      panel_host_->Zoom(content::PAGE_ZOOM_OUT); | 
| +      break; | 
| + | 
| default: | 
| LOG(WARNING) << "Received unimplemented command: " << id; | 
| break; | 
| @@ -681,7 +721,7 @@ void Panel::UpdateTitleBar() { | 
| } | 
|  | 
| void Panel::LoadingStateChanged(bool is_loading) { | 
| +  command_updater_.UpdateCommandEnabled(IDC_STOP, is_loading); | 
| native_panel_->UpdatePanelLoadingAnimations(is_loading); | 
| UpdateTitleBar(); | 
| -  command_updater_.UpdateCommandEnabled(IDC_STOP, is_loading); | 
| } | 
|  |