| Index: base/files/file_util_win.cc
 | 
| diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc
 | 
| index d70454df3836a7067f71eecf5a0ae8673376f474..857fd27a56c376af2351af874420265518b1101f 100644
 | 
| --- a/base/files/file_util_win.cc
 | 
| +++ b/base/files/file_util_win.cc
 | 
| @@ -177,9 +177,20 @@ bool CopyDirectory(const FilePath& from_path, const FilePath& to_path,
 | 
|    FilePath real_from_path = MakeAbsoluteFilePath(from_path);
 | 
|    if (real_from_path.empty())
 | 
|      return false;
 | 
| +  // Originally this CopyDirectory() returns false when |to_path| string
 | 
| +  // contains |from_path| string. While this can be that the to_path is within
 | 
| +  // the from_path, e.g., parent-child relationship if they are both folders, it
 | 
| +  // also can be that the two paths are in the same folder, just that one name
 | 
| +  // contains the other, e.g. C:\\JumpListIcon and C:\\JumpListIconOld.
 | 
| +  // We make this function not return false in the latter situation by calling
 | 
| +  // IsParent() function as below. This allows the copy-n-delete code after the
 | 
| +  // "return false" below to execute.
 | 
| +  //
 | 
| +  // The comment added above is in reply to the original comment as in line 166,
 | 
| +  // which is copied below:
 | 
| +  // "This function does not properly handle destinations within the source."
 | 
|    if (real_to_path.value().size() >= real_from_path.value().size() &&
 | 
| -      real_to_path.value().compare(0, real_from_path.value().size(),
 | 
| -                                   real_from_path.value()) == 0) {
 | 
| +      real_from_path.IsParent(real_to_path)) {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| 
 |