| Index: chrome/browser/download/download_shelf_context_menu.cc
 | 
| diff --git a/chrome/browser/download/download_shelf_context_menu.cc b/chrome/browser/download/download_shelf_context_menu.cc
 | 
| index ac1bd5daf265168865a86f116260f14ce77d5282..76de09f827654a8edf04048ad9b325176ce218ae 100644
 | 
| --- a/chrome/browser/download/download_shelf_context_menu.cc
 | 
| +++ b/chrome/browser/download/download_shelf_context_menu.cc
 | 
| @@ -4,6 +4,7 @@
 | 
|  
 | 
|  #include "chrome/browser/download/download_shelf_context_menu.h"
 | 
|  
 | 
| +#include "base/command_line.h"
 | 
|  #include "chrome/browser/browser_process.h"
 | 
|  #include "chrome/browser/download/download_crx_util.h"
 | 
|  #include "chrome/browser/download/download_item_model.h"
 | 
| @@ -15,12 +16,23 @@
 | 
|  #include "content/public/browser/download_item.h"
 | 
|  #include "content/public/browser/download_manager.h"
 | 
|  #include "content/public/browser/page_navigator.h"
 | 
| +#include "content/public/common/content_switches.h"
 | 
|  #include "grit/generated_resources.h"
 | 
|  #include "ui/base/l10n/l10n_util.h"
 | 
|  
 | 
|  using content::DownloadItem;
 | 
|  using extensions::Extension;
 | 
|  
 | 
| +namespace {
 | 
| +
 | 
| +// Returns true if downloads resumption is enabled.
 | 
| +bool IsDownloadResumptionEnabled() {
 | 
| +  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
 | 
| +  return command_line.HasSwitch(switches::kEnableDownloadResumption);
 | 
| +}
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
|  DownloadShelfContextMenu::~DownloadShelfContextMenu() {
 | 
|    DetachFromDownloadItem();
 | 
|  }
 | 
| @@ -75,7 +87,7 @@ bool DownloadShelfContextMenu::IsCommandIdEnabled(int command_id) const {
 | 
|      case CANCEL:
 | 
|        return !download_item_->IsDone();
 | 
|      case TOGGLE_PAUSE:
 | 
| -      return download_item_->GetState() == DownloadItem::IN_PROGRESS;
 | 
| +      return !download_item_->IsDone();
 | 
|      case DISCARD:
 | 
|      case KEEP:
 | 
|      case LEARN_MORE_SCANNING:
 | 
| @@ -126,14 +138,11 @@ void DownloadShelfContextMenu::ExecuteCommand(int command_id, int event_flags) {
 | 
|        download_item_->Cancel(true /* Cancelled by user */);
 | 
|        break;
 | 
|      case TOGGLE_PAUSE:
 | 
| -      // It is possible for the download to complete before the user clicks the
 | 
| -      // menu item, recheck if the download is in progress state before toggling
 | 
| -      // pause.
 | 
| -      if (download_item_->GetState() == DownloadItem::IN_PROGRESS) {
 | 
| -        if (download_item_->IsPaused())
 | 
| -          download_item_->Resume();
 | 
| -        else
 | 
| -          download_item_->Pause();
 | 
| +      if (download_item_->GetState() == DownloadItem::IN_PROGRESS &&
 | 
| +          !download_item_->IsPaused()) {
 | 
| +        download_item_->Pause();
 | 
| +      } else {
 | 
| +        download_item_->Resume();
 | 
|        }
 | 
|        break;
 | 
|      case DISCARD:
 | 
| @@ -191,9 +200,11 @@ string16 DownloadShelfContextMenu::GetLabelForCommandId(int command_id) const {
 | 
|      case CANCEL:
 | 
|        return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_CANCEL);
 | 
|      case TOGGLE_PAUSE:
 | 
| -      if (download_item_ && download_item_->IsPaused())
 | 
| -        return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM);
 | 
| -      return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM);
 | 
| +      if (download_item_ &&
 | 
| +          download_item_->GetState() == DownloadItem::IN_PROGRESS &&
 | 
| +          !download_item_->IsPaused())
 | 
| +        return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_PAUSE_ITEM);
 | 
| +      return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_RESUME_ITEM);
 | 
|      case DISCARD:
 | 
|        return l10n_util::GetStringUTF16(IDS_DOWNLOAD_MENU_DISCARD);
 | 
|      case KEEP:
 | 
| @@ -264,22 +275,36 @@ ui::SimpleMenuModel* DownloadShelfContextMenu::GetFinishedMenuModel() {
 | 
|  }
 | 
|  
 | 
|  ui::SimpleMenuModel* DownloadShelfContextMenu::GetInterruptedMenuModel() {
 | 
| -#if defined(OS_WIN)
 | 
| -  // The Help Center article is currently Windows specific.
 | 
| -  // TODO(asanka): Enable this for other platforms when the article is expanded
 | 
| -  // for other platforms.
 | 
| +#if !defined(OS_WIN)
 | 
| +  // If resumption isn't enabled and we aren't on Windows, then none of the
 | 
| +  // options here are applicable.
 | 
| +  if (!IsDownloadResumptionEnabled())
 | 
| +    return GetInProgressMenuModel();
 | 
| +#endif
 | 
| +
 | 
|    if (interrupted_download_menu_model_)
 | 
|      return interrupted_download_menu_model_.get();
 | 
|  
 | 
|    interrupted_download_menu_model_.reset(new ui::SimpleMenuModel(this));
 | 
|  
 | 
| +  if (IsDownloadResumptionEnabled()) {
 | 
| +    interrupted_download_menu_model_->AddItemWithStringId(
 | 
| +        TOGGLE_PAUSE, IDS_DOWNLOAD_MENU_RESUME_ITEM);
 | 
| +  }
 | 
| +#if defined(OS_WIN)
 | 
| +  // The Help Center article is currently Windows specific.
 | 
| +  // TODO(asanka): Enable this for other platforms when the article is expanded
 | 
| +  // for other platforms.
 | 
|    interrupted_download_menu_model_->AddItemWithStringId(
 | 
|        LEARN_MORE_INTERRUPTED, IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED);
 | 
| +#endif
 | 
| +  if (IsDownloadResumptionEnabled()) {
 | 
| +    interrupted_download_menu_model_->AddSeparator(ui::NORMAL_SEPARATOR);
 | 
| +    interrupted_download_menu_model_->AddItemWithStringId(
 | 
| +        CANCEL, IDS_DOWNLOAD_MENU_CANCEL);
 | 
| +  }
 | 
|  
 | 
|    return interrupted_download_menu_model_.get();
 | 
| -#else
 | 
| -  return GetInProgressMenuModel();
 | 
| -#endif
 | 
|  }
 | 
|  
 | 
|  ui::SimpleMenuModel* DownloadShelfContextMenu::GetMaliciousMenuModel() {
 | 
| 
 |